Можно ли возвращать лямбды в функции?
Рассмотрим следующую функцию, которая должна возвращать функцию, добавляющую два к любому заданному аргументу:
∇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. Вместо этого вы можете захотеть написать свой собственный оператор .