Dear all, there is this neat "one-line" BFS implementation

bfs :: Eq a
    => ( a -> [a] ) -> a -> [a]
bfs next start =
    let xs = nub $ start : ( xs >>= next )
    in  xs

but it has a problem: it only works for infinite graphs. This is fine:

take 20 $  bfs ( \ x -> [2*x, x+1] ) 1

but this is not:

take 20 $  bfs ( \ x -> filter (>0) [ div x 2, x - 1 ] ) 10


Is there a nice way to repair this?
(I know how to code a BFS but here I'm asking for a one-liner.)


J. W.

Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to