Возврат функции из функции в OZ. Проблемы высшего порядка

Я пытаюсь написать функцию, которая в результате вернет функцию. Я пытаюсь добиться чего-то вроде этого:

{{Add 3}4}

где результат будет равен 7. Я нашел следующее oz">ТАК вопрос, который имеет тот же вопрос, но ответ не работает для меня. Я получаю сообщение «Переменный сумматор не введен». Я пытался объявить его локально, а также установить ей равную переменную, но пока у меня ничего не получилось. я знаю, что я хочу делать; Я хочу вернуть функцию, которая была украшена внешней функцией. К сожалению, я не могу найти ничего в документации о том, как это сделать. Вот что я пробовал, основываясь на онлайн-документах.

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 и добавить его к результату вызова того, что там осталось. Кто-нибудь может указать путь?

Спасибо,


person Tadgh    schedule 14.09.2013    source источник
comment
Я исправил ответ на вопрос, который вы имеете в виду. Я не очень понимаю ваш код, хотя. Откуда берется значение для M?   -  person wmeyer    schedule 14.09.2013


Ответы (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
person Ankur    schedule 08.12.2013

Если вы не хотите использовать синтаксис функтора в ответе Анкура, вы также можете написать что-то вроде

local
    fun {Add A}
        fun {$ B} A+B end
    end
in
    {Browse {{Add 3} 4}}
end
person francoisr    schedule 09.02.2014