Возврат функции из функции в OZ. Проблемы высшего порядка
Я пытаюсь написать функцию, которая по существу будет возвращать функцию в результате. Я пытаюсь добиться чего-то вроде этого:
{{Add 3}4}
где результат получится как 7. Я нашел следующий вопрос, который имеет тот же вопрос, но ответ не сработал для меня. Я получаю "Переменная Сумма не введена". Я попытался объявить это локально, а также установить переменную, равную ему, но пока я не получил ничего, чтобы работать. Я знаю, что я хочу сделать; Я хочу вернуть функцию, которая была оформлена внешней функцией. К сожалению, я не могу найти ничего твердого в документации о том, как это сделать. Вот то, что я пытался, основываясь на онлайн-документах.
declare
local
proc {And M ?B}
if M > 0 then B = M else B = 0 end
end
in
proc {Add2 J ?B}
J + {And}
end
end
Когда я звоню
{{Browse {Add2 1}2}
Я надеюсь получить 3. Что я на самом деле получаю, так это компиляцию без ошибок, которая на самом деле ни к чему не приводит. Я знаю, что это не то, что я ищу, но это все, что у меня так далеко. Я хочу взять J и добавить его к результату вызова того, что там осталось. Кто-нибудь может указать путь?
Спасибо,
2 ответа
Используя функцию:
functor
import
Application
System
define
fun {Add X}
fun {$ N} X+N end
end
{System.showInfo {{Add 10} 20}}
{Application.exit 0}
end
Используя процедуру:
functor
import
Application
System
define
proc {Add X P}
P = proc {$ N R} R = N+X end
end
{System.showInfo {{Add 10} 20}}
{Application.exit 0}
end
Если вы не хотите использовать синтаксис функтора в ответе Анкура, вы также можете написать что-то вроде
local
fun {Add A}
fun {$ B} A+B end
end
in
{Browse {{Add 3} 4}}
end