Functional programming 如何使用Cons运算符?

Functional programming 如何使用Cons运算符?,functional-programming,ocaml,ml,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运算符吗 谢谢在Ocaml中,cons操作符是::。但这并不是你代码的唯一问题 在这里,您的函数只接受一个

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

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中,您不必给出值的类型,但如果这样做,这就不是rigth语法。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

在Ocaml中,cons操作符是
。但这并不是你代码的唯一问题

在这里,您的函数只接受一个参数(
x
),但您将其与两个(
member x ys
)一起使用,您希望执行
let rec member x l=match l with
let rec member x=function
,这是等效的

在OCaml中,您不必给出值的类型,但如果这样做,这就不是rigth语法。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

你应该用编程语言(Haskell?)来标记你的问题。你应该用编程语言(Haskell?)来标记你的问题。也可以将整个函数类型一次性放在它的“原型”之前(
let member:'a->a list->bool=fun x l->…
)。正如您正确指出的那样,OP在这两种情况下都是不正确的。也可以将整个函数类型一次性放在其“原型”之前(
让成员:'a->'a list->bool=fun x l->……
)。正如你正确指出的那样,无论哪种方式,OP都是不正确的。