1 import "Prelude" hiding (findFirst)
\r
6 findFirst :: (a -> <e> Maybe b) -> [a] -> <e> Maybe b
\r
7 findFirst f l = loop 0
\r
11 | i >= len = Nothing
\r
12 | otherwise = match f (l!i) with
\r
14 Nothing -> loop (i+1)
\r
16 dfsFirst :: (a -> <e> Boolean) -> (a -> <e> [a]) -> [a] -> <e> (Maybe a)
\r
17 dfsFirst acceptable successors initial = tryAll initial
\r
19 tryAll l = findFirst loop l
\r
21 | acceptable p = Just p
\r
22 | otherwise = tryAll (successors p)
\r
24 data Weighted a = Weighted a Double
\r
26 //type SearchAlgorithm e a =
\r
27 // (a -> <e> Boolean) -> (a -> <e> [Weighted a]) -> [Weighted a] -> <e> Weighted (Maybe a)
\r
29 //dfs :: SearchAlgorithm e a
\r
30 dfs :: (a -> <e> Boolean) -> (a -> <e> [Weighted a]) -> [Weighted a] -> <e> Weighted (Maybe a)
\r
31 dfs acceptable successors initial = foldl loop (Weighted Nothing infinity) initial
\r
33 loop best@(Weighted _ bestW) (Weighted p w)
\r
35 | acceptable p = Weighted (Just p) w
\r
36 | otherwise = foldl loop best
\r
37 $ map (\(Weighted p' w') -> Weighted p' (w+w'))
\r
41 bfs :: SearchAlgorithm e a
\r
43 aStar :: (a -> <e> Double) -> SearchAlgorithm e a
\r