编写一个 ML 高阶函数 philter(f,x,L),它接受一个函数 f 和一个元素 x,并返回列表 L 上所有这些元素 y 的列表,使得 f(x,y) = true。
Philter:((a' * a')→bool * a' * a'list)→a'list
我的代码
fun filter p [] = [] | filter p (x::xs) =
if p x
then
x :: filter p xs
else
filter p xs;
filter (fn(x) => x<6) [6,3,0,1,8,5,9,3]; filter (fn(x) => x<6)
我有不同的 val filter = fn : ('a -> bool) -> 'a list -> 'a list
任何人都可以帮助我吗?
您的函数只需要一个列表和一个函数作为参数,其中第三个参数例如 element x
?? 因此,您检查条件p x
而不是p(x,y)
,从您的描述中p
应该有类型:
(a'* a') -> bool
这是我的实现:
fun filter (p :('a * 'a -> bool) , _ ,[]) = []
| filter (p, x ,(y::ys))= if p (x,y) then y :: filter (p, x, ys)
else filter (p, x, ys);
这是一个尾递归实现:
fun filter2 (p : ('a * 'a -> bool), x, L)=
let
fun filter3 (p, _, [], L) = rev L
| filter3 (p, x, (y::ys), L) = if p (x,y) then filter3 (p, x, ys, (y::L))
else filter3 (p, x, ys, L);
in
filter3 (p, x, L, [])
end
示例(参见类型和结果):
val filter = fn : ('a * 'a -> bool) * 'a * 'a list -> 'a list
val filter2 = fn : ('a * 'a -> bool) * 'a * 'a list -> 'a list
val it = () : unit
- filter ((fn(x,y) => x<y), 4,[6,3,0,1,8,5,9,3]);
val it = [6,8,5,9] : int list
- filter2 ((fn(x,y) => x<y), 4,[6,3,0,1,8,5,9,3]);
val it = [6,8,5,9] : int list
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句