基本上,该函数将一个参数作为字符、数字并检查它是否在 List 内?
let rec (member: a -> List a -> Bool) x =
| [] -> False
| Cons y ys -> if x == y then True else member x ys
;;
我得到了解决方案,但似乎太模糊了。
谁能告诉我在这种特殊情况下如何使用 Cons 运算符?
谢谢
基本上,该函数将一个参数作为字符、数字并检查它是否在 List 内?
let rec (member: a -> List a -> Bool) x =
| [] -> False
| Cons y ys -> if x == y then True else member x ys
;;
我得到了解决方案,但似乎太模糊了。
谁能告诉我在这种特殊情况下如何使用 Cons 运算符?
谢谢
在 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 =
)。
相等的运算符 is=
和 not ==
。
即使它是正确的,也不要用于if then else
返回布尔逻辑运算符||
,而&&
应该使用它。
更正的代码:
let rec member x = function
| [] -> false
| y :: ys -> x = y || member x ys