我正在试图弄清楚如何编码 .
在F#中实现一个测试元素是否是给定列表成员的函数 . 这是我想要的类型 .
val memberof:'a *'列表 - > bool'a:equality
以下是该功能的实例 .
成员1 [1; 2; 3] ;;错误FS0003:该值不是函数,不能应用memberof(1,[1; 2; 3]);; val it:bool = true memberof(1,[]);; val it:bool = false memberof(1,[2; 3; 4]);; val it:bool = false
继承人我把它放在一起......
let rec memberof l =
match (l:float) with
| a.Item(l) -> l -> bool + (memberof l)
要么
let rec memberof l =
match (l:float list) with
| [] -> false
| (a:float)::b -> (a)=(memberof b)->bool
1 回答
要么
要么
测试用例
哪个输出
这个问题
就是它
正确地将列表拉开
然而
是不正确的 .
使用列表上的递归函数,您需要拉出列表的头部并处理头部 . 然后你想再次调用该函数,这次将列表的尾部作为新的列表变量传递,例如,
由于这是predicate,我们只需要在达到所需的真或假时停止 . 在此示例中,当找到true时,函数可以结束,因此不需要为列表的其余部分调用
memberof
.对于您要求的特定签名