Я читаю исследовательскую работу «Высокопроизводительные динамические хеш-таблицы без блокировки». и наборы на основе списков (Магед М. Майкл), и я не понимаю этот синтаксис псевдокода, который используется для примеров.
В частности, эти части:
〈pmark,cur,ptag〉: MarkPtrType;
〈cmark,next,ctag〉: MarkPtrType;
nodeˆ.〈Mark,Next〉←〈0,cur〉;
if CAS(prev,〈0,cur,ptag〉,〈0,node,ptag+1〉)
Например. (стр. 5, глава 3)
ОБНОВЛЯТЬ:
ˆ.
кажется нотацией Паскаля для разыменования указателя и доступа к переменной в записи (https://stackoverflow.com/a/1814936/8524584).←
похоже на Haskell, похожую на оператор нотации do для присваивания, который присваивает результат операции переменной. Это немного странно, так как статья почти на десять лет старше, чем Haskell. Вероятно, это какая-то нотация, которую Haskell также позаимствовал. (https://en.wikibooks.org/wiki/Haskell/do_notation#Translating_the_bind_operator)〈a, b〉
— это математическая векторная запись внутреннего произведения вектора (https://mathworld.wolfram.com/InnerProduct.html)@greybeard хорошая находка об отношении APL к оператору ←
. Что касается синтаксиса скалярного произведения, маловероятно, что оно действительно является скалярным произведением, поскольку в векторе более двух элементов. Я не уверен, что понимаю вас в нотации специального списка. Не могли бы вы привести пример на Python?
Гм, low, high = 2, 8
был примером Python, и он такой же, как low, high = [2, 8]
или [low, high] = [2, 8]
, и почти такой же, как low, high = (2, 8)
.
(nice find
У кого есть воспоминания из 60-х, тот там не был.)
Обозначение широких угловых скобок кажется либо специальным обозначением списка, либо манипулированием несколькими переменными в одной строке (спасибо @graybeard за указание на это). Это может быть даже какой-то кортеж.
Вот как 〈pmark,cur,ptag〉: MarkPtrType;
будет выглядеть на C-подобном языке:
MarkPtrType pmark;
MarkPtrType cur;
MarkPtrType ptag;
// or some list assignment notation
// or a tuple
ˆ.
кажется нотацией Паскаля для разыменования указателя и доступа к переменной в записи (https://stackoverflow.com/a/1814936/8524584).
Стрелка ←
— это нотация присваивания APL , также похожая на оператор присваивания do в Haskell.
Вы можете сами ответить на свой вопрос. Я второй «направление заимствования» между псевдокодом и APL (и, почти четверть века спустя, Haskell). Я сомневаюсь, что внутренний продукт предназначен; Я считаю, что это специальная нотация списка, похожая на Python, где фигурные скобки можно опускать чаще, чем в
low, high = 2, 8
.