2013-01-14 24 views
1

我是mozart盎司的初学者,我想写一个简单的高阶函数,如{{Add 1} 2},其结果必须是3.我想这是类似C中的嵌套调用,一个函数可以调用它自己?我不知道如何定义这个功能,我应该写如何在mozart oz中编写一个简单的高阶函数?

declare 
fun {Add I} 

declare 
fun {{Add I}J} 

? 我真的不知道如何完成这样的功能。我已经尝试过好几次了,但我从未运作过。

回答

1

像这样的东西应该工作(未经测试):

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}} 
+0

我得到 “变加法还未出台。” – Tadgh

+0

@Tadgh:确实有错误。我添加了“in”关键字来将本地加法器的声明与函数体分开。 – wmeyer

+0

谢谢。为什么这个工作?函数只在本地声明,然后整个函数的返回值是“加法器”? – Tadgh

0

简洁的代码:

fun{Add I} 
    fun{$ J} I+J end 
end