HOPを使用した再帰なしで、データ型テストに合格することに応じて、2つのリストを「二重」にフィルタリングしようとしています。以下は、解決策に対する私の非常に醜い試みです...
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」だけを抽出する非再帰的な方法はありますか、それともこの問題を完全に間違った方向に解決しようとしていますか?