Как написать простую функцию высшего порядка в Моцарте?
Я новичок в mozart oz, и я хотел бы написать простую функцию более высокого порядка, например {{Add 1}2}, результат которой должен быть 3. Я думаю, это что-то вроде вложенного вызова в C, где функция может вызвать сама? Я не уверен, как определить эту функцию, я должен написать
declare
fun {Add I}
или же
declare
fun {{Add I}J}
? И я действительно не знаю, как закончить такую функцию. Я пробовал несколько раз, но у меня никогда не получалось.
2 ответа
Решение
Примерно так должно работать (не проверено):
declare
fun {Add I}
% define a local function which adds I to its argument
fun {Adder J}
J + I
end
in
% returns this new function
Adder
end
{Show {{Add 1} 2}} % should print 3
% or more verbose:
declare
Add1 = {Add 1}
{Show {Add1 2}}