从OZ中的函数返回函数。更高阶的问题

时间:2013-09-14 02:50:40

标签: logic higher-order-functions oz mozart

我正在尝试编写一个函数,它本质上会返回一个函数。我正在努力实现这样的目标:

{{Add 3}4}

结果将显示为7.我发现以下SO question有相同的问题,但答案对我不起作用。我收到“不引入可变加法器”。我尝试在本地声明它,并设置一个等于它的变量,但到目前为止,我还没有任何工作。我知道我想做什么;我想返回一个由外部函数修饰的函数。不幸的是,我在文档中找不到任何关于如何做到这一点的可靠内容。这是我一直在尝试的,基于在线文档。

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 个答案:

答案 0 :(得分:1)

使用功能:

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

答案 1 :(得分:0)

如果您不想在Ankur的答案中使用仿函数语法,您还可以编写类似

的内容
local
    fun {Add A}
        fun {$ B} A+B end
    end
in
    {Browse {{Add 3} 4}}
end