基本上该函数会将一个参数作为字符,数字并检查它是否在列表中?
let rec (member: a -> List a -> Bool) x =
| [] -> False
| Cons y ys -> if x == y then True else member x ys
;;
我得到了解决方案,但似乎太模糊了。
有人能告诉我如何在这种特殊情况下使用Cons运算符吗?
由于
答案 0 :(得分:4)
在Ocaml中,cons运算符为::
。但这不是你的代码的唯一问题。
此处您的函数只使用一个参数(x
),但您将其与两个(member x ys
)一起使用,您希望执行let rec member x l = match l with
或let rec member x = function
等效。
在OCaml中,您不必提供值的类型,但如果这样做,则这不是严格的语法。 OCaml类型不是大写的,类型参数以'
开头
并且放在它们参数化的类型之前,然后函数的类型为'a -> 'a list -> bool
。此外,对于函数,您必须单独给出参数类型和返回类型(let rec member (x : 'a) (l : 'a list) : bool =
)。
相等的运算符是=
而不是==
。
即使它是正确的,也不要使用if then else
来返回布尔值,而应该使用逻辑运算符||
和&&
。
更正后的代码:
let rec member x = function
| [] -> false
| y :: ys -> x = y || member x ys