2010-11-28 186 views
1

我們可以在ocaml的if-else循環中執行多個操作嗎?嵌套if - else語句-ocaml

我努力做到以下幾點:

let rec appendtolist n list b = 

    let f x = 

     if (b < 0) then x 

     else if (b == 0) then ((appendtocode n (List.hd list)) (b-1)) (* THIS LINE *) 

     else ((appendtocode n (List.hd list)) :: (appendtolist n (List.tl list) (b-1))) 

    in 

    f list 

    ;; 

我得到就行了編譯器,我做出了大膽的一個抱怨:​​

這種表達是不是一個功能,它不能被應用

我想調用我的功能,當b==0,也遞減值b

我在這種情況下怎麼辦?

請指教。

謝謝。

回答

2

這與before基本上是一樣的錯誤。

你正在評估

appendtocode n (List.hd list) 

返回一個值,這是不是的功能。然後你試着用b-1作爲它的參數來調用它,但因爲它不是一個函數,所以你不能這樣做。

我想在b == 0時調用我的函數,並且還減少b的值。

減量b給誰? b是函數appendtolist的一個參數,因此如果遞歸調用appendtolist,則可以爲b提供一個新參數,這就是您在else情況下所做的工作,並且工作正常。但在then的情況下,你不叫appendtolist。你只打電話appendtocodeappendtocode沒有第三個參數b。所以通過它b-1根本沒有意義。

我的猜測是,如果你刪除b-1,你的程序就可以正常工作。

PS:此問題與嵌套if完全無關。

+0

appendtocode返回一個字符串。我想調用它,並減少b的值。 – JJunior 2010-11-28 21:44:34

1

快速猜測:

表達給出

(appendtocode n (List.hd list)) 

回報一些東西,不是一個函數,因此你可以(B-1)的值並不適用於它是什麼你正在努力去做。爲了驗證,你可以查看appendtocode的類型,看看它可能需要兩三個curried參數。

+0

我不想將b-1應用於appendtocode。我只想在這個函數中減少b-1。 – JJunior 2010-11-28 21:45:30