Можно ли возвращать лямбды в функции?

Рассмотрим следующую функцию, которая должна возвращать функцию, добавляющую два к любому заданному аргументу:

      ∇r←addtwo
  r←{⍵+2}
∇

Этот код загружается без ошибок, но я просто не могу использовать возвращаемое значение, не вызывая ошибок.

            addtwo ⍝ doesn't cause errors
      addtwo 1
VALUE ERROR
      addtwo 1
      ^
      x←addtwo
VALUE ERROR
      x←addtwo
      ^

Я использую GNU-APL 1.8.

2 ответа

Обычный обходной путь для того, что вы собираетесь сделать, - это вернуть строку из функции и выполнить (⍎) строку:

            ∇Z←FOO
[1] ⍝ return a string that can be ⍎'ed····
[2] Z←'{⍵+2}'
[3] ∇

      ⍎FOO,⍕42
44

Я считаю, что Dyalog APL - единственная реализация, позволяющая это. Попробуйте онлайн!

Несмотря на то, что это может сработать, это не обычный способ работы APL. Вместо этого вы можете захотеть написать свой собственный оператор .

Другие вопросы по тегам