Возврат функции из функции в 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
Другие вопросы по тегам