【发布时间】:2020-12-24 15:02:17
【问题描述】:
我正在阅读一篇研究论文高性能动态无锁哈希表 和 List-Based Sets (Maged M. Michael),我不明白这个用于示例的伪代码语法。
具体是这些部分:
〈pmark,cur,ptag〉: MarkPtrType;
〈cmark,next,ctag〉: MarkPtrType;
nodeˆ.〈Mark,Next〉←〈0,cur〉;
if CAS(prev,〈0,cur,ptag〉,〈0,node,ptag+1〉)
更新:
-
ˆ.似乎是用于取消引用指针并访问记录中的变量 (https://stackoverflow.com/a/1814936/8524584) 的 Pascal 表示法。 -
←箭头似乎是一个类似于 Haskell 的 do notation 赋值运算符,它将运算结果分配给变量。这有点奇怪,因为这篇论文比 Haskell 早了将近十年。这可能是 Haskell 也借鉴的一些符号。 (https://en.wikibooks.org/wiki/Haskell/do_notation#Translating_the_bind_operator) -
〈a, b〉是向量内积的数学向量表示法 (https://mathworld.wolfram.com/InnerProduct.html)
【问题讨论】:
-
欢迎您回答自己的问题。我在 pseudo code 和 APL(以及几乎四分之一世纪后的 Haskell)之间的第二个“借用方向”。我怀疑内积是有意的;我认为它是一种类似于 Python 的临时列表表示法,其中大括号可以比
low, high = 2, 8更频繁地删除。 -
@greybeard 很好地找到了与
←运算符的 APL 关系。关于点积语法,它实际上似乎不太可能是点积,因为向量中有两个以上的元素。我不确定我是否理解您对临时列表表示法的理解。能给我举个 Python 的例子吗? -
嗯,
low, high = 2, 8是 Python 的示例,与low, high = [2, 8]或[low, high] = [2, 8]相同,与low, high = (2, 8)几乎相同 -
(
nice find拥有 60 年代记忆的人都没有那里。)
标签: algorithm data-structures syntax hashmap pseudocode