嵌套if - else语句-ocaml

时间:2010-11-28 21:25:29

标签: ocaml

我们可以在ocaml中的if-else循环中进行多个操作吗?

我正在尝试执行以下操作:

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 个答案:

答案 0 :(得分:2)

这与before基本相同。

您正在评估

appendtocode n (List.hd list)

返回一个值,一个函数。然后你尝试用b-1作为参数来调用它,但由于它不是函数,你不能这样做。

  

我想在b == 0时调用我的函数,并且还减少b的值。

为谁减少bb是函数appendtolist的参数,所以如果你递归地调用appendtolist,你可以为b提供一个新的参数,这就是你在else案例,并且工作正常。但在then案例中,您并未调用appendtolist。您只是致电appendtocodeappendtocode没有第三个参数b。所以传递它b-1根本没有意义。

我的猜测是,如果删除b-1,您的程序就可以正常工作。

PS:此问题与嵌套if完全无关。

答案 1 :(得分:1)

快速猜测:

表达式为

( appendtocode n (List.hd list) )

返回不是函数的东西,因此你不能将(b-1)的值应用于它,这是你想要做的。要进行验证,您可以查找appendtocode的类型并查看它可能需要两到三个参数。