0

我正在尝试编写一个函数,该函数实际上将返回一个函数。我正在尝试实现这样的目标:

{{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,并将其添加到调用任何剩余内容的结果中。任何人都可以指路吗?

谢谢,

4

2 回答 2

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
于 2013-12-08T08:47:07.923 回答
0

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

local
    fun {Add A}
        fun {$ B} A+B end
    end
in
    {Browse {{Add 3} 4}}
end
于 2014-02-09T11:04:18.990 回答