【发布时间】:2020-02-26 14:51:08
【问题描述】:
我正在尝试编写一个函数,从整数列表中过滤正整数,返回一个仅包含负整数的列表。
例如,如果我有一个列表列表,例如 [[-1; 1]; [1]; [-1;-1]] 它将返回 [[-1]; []; [-1;-1]]。
我尝试使用我教科书中的过滤和转换功能。
let rec transform (f:'a -> 'b) (l:'a list) : 'b list =
begin match l with
| [] -> []
| x::tl -> (f x)::(transform f tl)
end
对于过滤器,我之前写过:
let rec filter (pred: 'a -> bool) (l: 'a list) : 'a list =
begin match l with
| [] -> []
| x :: tl -> if pred x then x :: (filter pred tl) else filter pred tl
end
所以,使用这些,我写了
let filter_negatives (l: int list list) : int list list =
transform (fun l -> (filter(fun i -> i<0)) + l) [] l
但我仍然无法完全理解匿名函数,而且我收到了我不知道该怎么做的错误消息。
这个函数有类型 ('a -> 'b) -> 'a list -> 'b list 它适用于太多的论点;也许你忘记了一个 `;'。
【问题讨论】: