如何使用Cons运营商?

时间:2013-05-16 09:06:20

标签: functional-programming ocaml ml

基本上该函数会将一个参数作为字符,数字并检查它是否在列表中?

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

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

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

由于

1 个答案:

答案 0 :(得分: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 =)。

相等的运算符是=而不是==

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

更正后的代码:

let rec member x = function
| [] -> false
| y :: ys -> x = y || member x ys