Concurrent Clean : Re: 小町算
[id:lethevert:20070718:p2]
k.inabaさんのアプローチhttp://www.kmonos.net/wlog/75.html#_1916070718で書いてみた。
module Main2 extension for-notation import StdBase, OptEnv, StdUtil Start w # a = [1,2,3,4,5,6,7,8,9] |> number |> flatmap term |> flatmap expr |> filter oneElm |> flat |> filter ((==) 100) = for w f <- stdio f = f $> length a $> newline _ <- fclose f return f gg [] = [[]] f gg [a] = [[a]] f gg [a,b:c] = [[a:x] \\ x <- f gg [b:c]] ++ flatmap (f gg) [[g a b:c] \\ g <- gg] number = f [\a b = a*10+b] term = f [(*),(/)] expr = f [(+),(-)] flat = foldr (++) [] flatmap f = flat o (map f) oneElm [a] = True oneElm _ = False