Как написать простую функцию высшего порядка в Моцарте?

Я новичок в 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}}

Краткий код:

fun{Add I}
   fun{$ J} I+J end
end
Другие вопросы по тегам