该表达式的类型为字符串,但应使用'a list

时间:2019-04-08 23:08:00

标签: ocaml

我想计算列表中有多少个“ 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>

1 个答案:

答案 0 :(得分:1)

您有:

if List.length (List.hd x) == 0 then ...

但这仅在x是列表列表时才有意义。您的x是一个字符串列表。

可能您想要的只是这个:

if List.length x = 0 then ...

作为补充,OCaml中的相等比较运算符为===运算符用于特殊情况,在没有充分理由的情况下,请勿使用它。