2013-01-14 32 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