嵌套if - else语句-ocaml
我们可以在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
。
我在这种情况下怎么办?
请指教。
谢谢。
这与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
完全无关。
快速猜测:
表达给出
(appendtocode n (List.hd list))
回报一些东西,不是一个函数,因此你可以(B-1)的值并不适用于它是什么你正在努力去做。为了验证,你可以查看appendtocode
的类型,看看它可能需要两三个curried参数。
我不想将b-1应用于appendtocode。我只想在这个函数中减少b-1。 – JJunior 2010-11-28 21:45:30
appendtocode返回一个字符串。我想调用它,并减少b的值。 – JJunior 2010-11-28 21:44:34