嵌套if -else循环错误 - ocaml

时间:2010-11-28 21:10:34

标签: ocaml

我正在尝试为我的代码设计一个多个if-else循环。

我之前的代码是:

let rec appendtolist n list b  =
    let f x =
        if ( b == 0 ) then x
        else (append (appendtocode n (List.hd list)) (appendtolist n (List.tl list) (b-1)))
    in
        f list
    ;;

使用嵌套循环修改代码:

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)
         else appendtocode n (List.hd list) :: appendtolist n (List.tl list) (b-1)
    in
        f list
    ;;

但是我收到了这个错误:

This function is applied to too many arguments, maybe you forgot a `;'

我的代码似乎在语法上是正确的。这是在OCaml中实现嵌套循环的正确方法吗? 我跟着一个例子,在网上找到if-elseif循环,工作正常。

我需要最后输出x,这是在此函数中对appendtocodeappendtolist的所有递归调用之后形成的列表。

我在哪里出错?

请指导。

谢谢。

1 个答案:

答案 0 :(得分:1)

在您的第一个代码示例中,您正在调用appendtocode,如下所示:

appendtocode n (List.hd list)

所以我假设appendtocode是一个带2个参数的函数。

在第二个你这样称呼它:

appendtocode n (List.hd list) (b-1)

所以在这里你用3个参数调用它。因为它只需要两个,所以你会收到一条错误消息,告诉你你用太多的参数调用它。

PS:如果语句不是循环。