Hatena::Grouphaskell

Haskellで遊ぶよ

 | 

2009-06-02

探索

10:46

いいのみつけた。

探索

深さ優先探索
dfs :: (a -> [a]) -> a -> [a]
dfs f x = x:(f x >>= dfs f)
幅優先探索
bfs :: (a -> [a]) -> a -> [a]
bfs f = bfs' . (:[])
  where bfs' [] = []
        bfs' xs = xs ++ bfs' (xs >>= f)

-- 一行で書くと
bfs f = concat . takeWhile (not.null) . iterate (>> f) . (:[])
Programming:玉手箱:その他

こっちもすごく参考になる。

「ああいうことになってしまった原因は、与えられた問題に特化したコードを書こうとする姿勢にあると思われます。」

ハイすいません。あとで、そうなってしまった diff を書き直してみよう。。

トラックバック - http://haskell.g.hatena.ne.jp/edvakf/20090602
 |