我正在尝试为我的代码设计一个多个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
,这是在此函数中对appendtocode
和appendtolist
的所有递归调用之后形成的列表。
我在哪里出错?
请指导。
谢谢。
答案 0 :(得分:1)
在您的第一个代码示例中,您正在调用appendtocode
,如下所示:
appendtocode n (List.hd list)
所以我假设appendtocode
是一个带2个参数的函数。
在第二个你这样称呼它:
appendtocode n (List.hd list) (b-1)
所以在这里你用3个参数调用它。因为它只需要两个,所以你会收到一条错误消息,告诉你你用太多的参数调用它。
PS:如果语句不是循环。