我正在尝试“双重”过滤两个列表,具体取决于痛苦地通过数据类型测试而不使用 HOP 进行递归。以下是我非常丑陋的解决方案尝试......
datatype 'a test = Test of ('a -> bool) * string;
fun foo xs lst =
let
fun foo_bar(x, ls) =
let
val tests = (List.filter (fn (Test(f, str)) => (f x)) ls)
in
(List.map (fn (Test(f, str)) => str) tests)
end
in
(List.map (fn x => foo_bar(x, lst)) xs)
end;
allPass: 'a list -> 'a test list -> 'a test list;
allPass [1, 2, 40, 150] [positive, even]
应该返回字符串"pos"
。
目前,我的函数正在返回一个嵌套列表:[["pos"], ["pos even"], ["pos even"], ["pos even"]]
。有没有一种非递归的方法可以从这个结果中提取“pos”,还是我要以完全错误的方向解决这个问题?