2010-11-28 159 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