Concurrent Clean : Haskell の $ 演算子
Haskellの $ 演算子が便利そうだと思っていたのだけれど、Cleanでも使えることが分かった。
こんな風に定義すればよい。(関数でもよかったが、効率性を考えてマクロにしてみた)
($) infixl 0 //:: (a -> b) a -> b ($) f a :== f a
で、使ってみた。一応、つり銭の組み合わせを求めるプログラムだ。
change :: Int [Int] -> [[Int]] change _ [] = [] change amount coins | amount < 0 = [] | amount == 0 = [[]] | otherwise = [[hd coins] ++ a \\ a <- change $ amount - hd coins $ coins] ++ [a \\ a <- change amount $ tl coins]