Назначение ниладической функции - PullRequest
0 голосов
/ 24 января 2019

Нениладическая функция F может быть назначена переменной G с помощью

G ← F

Однако, если F нильадный, как я могу предотвратить его оценку?

Ответы [ 3 ]

0 голосов
/ 26 января 2019

APL оценивает выражения справа налево. Как только все аргументы функции присутствуют, функция оценивается, и функция и ее аргументы заменяются результатом вычисления.

Теперь рассмотрим ваш пример G ← F. Если F является монадическим или дуадическим, то F не может быть оценен, потому что отсутствует его правильный аргумент. В терминологии синтаксического анализатора токен F смещается, а не сокращается. Первое выражение, которое может быть уменьшено, - это G ← F, который присваивает F значению G.

С другой стороны, если F нильадно, то F может быть (и, следовательно, будет) оцениваться немедленно (скажем, с помощью результата Z), так что присвоение будет G ← Z, а не G ← F.

0 голосов
/ 27 января 2019

Я не уверен, что ты пытаешься сделать, так что прости меня за ответ на неправильный вопрос.

Для меня это звучит так, будто ты хочешь дополнительный правильный аргумент.В APL2 я бы сделал что-то вроде этого:

'' ⎕EA 'G ← F ra'

Если ra не определено, ошибка значения будет обнаружена, и ничего не произойдет.Если вы хотите значение по умолчанию для G, сделайте это назначение слева от EA.

0 голосов
/ 24 января 2019

Вы не можете.

В некотором смысле, функции niladic ведут себя как массивы, за исключением того, что их значение не определяется до тех пор, пока они не будут использованы. Это также означает, что они демонстрируют семантику значений, а не ссылочную семантику. Также обратите внимание, что ниладические функции не могут быть операндами операторов, а скорее их результатом станет операнд.

Чтобы обойти обе эти проблемы, нужно обернуть niladic-функцию в dfn так, чтобы она принимала фиктивный аргумент (или два), и, таким образом:

G←{F}
...