だから私は、フィルタリングを実行する折り畳みのための結合関数を書いています。
let filter_combine (pred: 'a -> bool) : a' list -> 'a list -> 'a list =
fun (x: 'a) (y: 'a list) -> x :: (filter pred y)
コンパイルの問題はありませんが、2 つのテスト ケースのうち 1 つが失敗しています。実装の何が問題になっていますか?
これは失敗するテストケースです...
[-1; 1] = fold (filter_combine (fun (x: int) -> (abs x) mod 2 <> 0)) [] [-2; -1; 0; 1; 2]
これは機能するものです...
[-2; 2] = fold (filter_combine (fun (x: int) -> (abs x) > 1)) [] [-2; -1; 0; 1; 2]