2014-10-05 32 views
1

這是OCaml中的一個主要代碼,它用於具有尾遞歸的Sigma函數。如何使OCaml具有尾遞歸功能?需要的語法建議和解釋

let sigma_tail_rec term a next b = 
let rec iter a result = 
    if "A" then "B" 
    else iter "C" "D" 
in iter a 0 

在那裏,我不知道怎麼填<A><D>,因此無法編譯

有誰幫我填了<A>到`...?

我已經試過這樣

let sigma_tail_rec term a next b = 
let rec iter a result = 
    if a>b then result+1 
    else iter a+1 result+a 
in iter a 0 

我不知道什麼是 「in iter a 0」 語法意味着

回答

1

我可以解釋in iter a 0

OCaml中遞歸局部函數的定義是這樣的:

let rec樂趣參數=定義in表達

表達你可以打電話 函數有趣,其定義爲其定義

sigma_tail_rec的骨架定義使用了一個名爲iter的本地遞歸函數,該函數帶有兩個參數。並且表達式(給出總體值sigma_tail_rec)是iter a 0

如果沒有關於此作業的更多信息,很難多說。一般來說,我想說你需要撥打term(這可能決定你何時達到計算結束時間)和next(這可能會產生一個新的值來處理)。所以恐怕有很多工作要解決。