Точка с запятой является многоцелевым разделителем в q. Он может разделять операторы (например, a:10; b:20
), в этом случае операторы оцениваются от слева направо , как и во многих других языках. Но когда он разделяет элементы списка, он создает выражение списка , которое (выражение) оценивается от справа налево , как и любое другое выражение q.
Как в этом примере:
q)(q;10+q:100)
110 100
Одна из многих перегрузок оператора точки (.
) оценивает свой левый операнд в списке значений в своем правом операнде:
q){x+y} . (q;10+q:100)
210
Для этого сначала нужно оценить само выражение списка, и оно будет справа налево, как любое другое выражение списка.
Однако последнее - это просто еще один способ получения результат
{x+y}[q;10+q:100]
, который должен давать то же значение. И это так. Оценивая аргументы функции от справа налево , конечно!
Примечание. Пожалуйста, не смущайтесь условной оценкой утверждение $[a;b;c]
. Несмотря на то, что это выглядит как выражение, на самом деле это оператор, который сначала оценивает a
и только затем b
или c
. Другими словами a
, b
и c
не являются аргументами некоторой функции $
в этом случае.