我们可以在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
的值。
在这种情况下我该怎么做?
请告知。
谢谢。
答案 0 :(得分:2)
这与before基本相同。
您正在评估
appendtocode n (List.hd list)
返回一个值,不一个函数。然后你尝试用b-1
作为参数来调用它,但由于它不是函数,你不能这样做。
我想在b == 0时调用我的函数,并且还减少b的值。
为谁减少b
? b
是函数appendtolist
的参数,所以如果你递归地调用appendtolist
,你可以为b
提供一个新的参数,这就是你在else
案例,并且工作正常。但在then
案例中,您并未调用appendtolist
。您只是致电appendtocode
而appendtocode
没有第三个参数b
。所以传递它b-1
根本没有意义。
我的猜测是,如果删除b-1
,您的程序就可以正常工作。
PS:此问题与嵌套if
完全无关。
答案 1 :(得分:1)
快速猜测:
表达式为
( appendtocode n (List.hd list) )
返回不是函数的东西,因此你不能将(b-1)的值应用于它,这是你想要做的。要进行验证,您可以查找appendtocode
的类型并查看它可能需要两到三个参数。