1

基本上,该函数将一个参数作为字符、数字并检查它是否在 List 内?

let rec (member: a -> List a -> Bool) x = 
 | [] -> False
 | Cons y ys -> if x == y then True else member x ys 
;;

我得到了解决方案,但似乎太模糊了。

谁能告诉我在这种特殊情况下如何使用 Cons 运算符?

谢谢

4

1 回答 1

4

在 Ocaml 中,cons 运算符是::. 但这不是您的代码的唯一问题。

在这里,您的函数只接受一个参数 ( x),但您将它与两个 ( member x ys) 一起使用,您想这样做let rec member x l = match l withlet rec member x = function等效。

在 OCaml 中,您不必提供值的类型,但如果您这样做,这不是严格的语法。OCaml 类型不大写,类型参数以它们参数化的类型开头' 并放在它们参数化的类型之前,那么你的函数的类型是'a -> 'a list -> bool. 此外,对于函数,您必须分别给出参数的类型和返回类型 ( let rec member (x : 'a) (l : 'a list) : bool =)。

相等的运算符 is=和 not ==

即使它是正确的,也不要用于if then else返回布尔逻辑运算符||,而&&应该使用它。

更正的代码:

let rec member x = function
| [] -> false
| y :: ys -> x = y || member x ys
于 2013-05-16T10:09:39.760 回答