我想计算列表中有多少个“ u”。函数调用的示例为
countu(["u"; "a"; "x"], 0);;
:-int = 1
我的代码是
let rec countu = fun(x, y) ->
if List.length (List.hd x) == 0 then y
else if List.hd x == "u" then countu(List.tl x, y+1)
else countu(List.tl x, y);;
我了解为什么我遇到了问题。 Ocaml想要一个'a list,但是因为我正在将它与字符串进行比较,所以它使它成为字符串。当我用y + 1调用countu时,它也会发疯,因为同样,它想要一个未指定的单位而不是整数。我该如何解决。我希望签名看起来像
val countups : string list * int -> int = <fun>
答案 0 :(得分:1)
您有:
if List.length (List.hd x) == 0 then ...
但这仅在x
是列表列表时才有意义。您的x
是一个字符串列表。
可能您想要的只是这个:
if List.length x = 0 then ...
作为补充,OCaml中的相等比较运算符为=
。 ==
运算符用于特殊情况,在没有充分理由的情况下,请勿使用它。