3

foldr の代わりに foldl を使用してフィルターを実装することは可能ですか? もしそうなら、あなたの実装を穏やかに説明してください。

4

3 に答える 3

9

差分リストの使用:

filter' :: (a -> Bool) -> [a] -> [a]
filter' p xs = foldl (\k x -> if p x then k . (x:) else k) id xs []
于 2012-11-23T19:34:37.643 に答える
2

これを思いついた:

myFilter p coll =
  foldl step [] coll where 
    step acc e  
      | p e = acc ++ [e] 
      | otherwise = acc

リストの最後に 1 つの要素を挿入する必要があるため、あまり効率的ではありません。

于 2012-11-23T19:30:08.477 に答える