豊福です。

nobsun
> 情報処理学会の会誌「情報処理」5月号の
> 連載:Haskellプログラミング で
> 「木(tree)で遊ぶ」という記事を書きました.

> ようやく,5月分の記事の PDF が以下のサイトで公開されました.
> http://www.ipsj.or.jp/07editj/promenade/
> ぜひ,読んで,ツッコミをくださいませ.

  まだ「例題1 二分木の列挙」のところまでしか読んでませんが
面白そうなので別の方法を考えてみました。

data Tree a = Leaf a | Branch (Tree a) (Tree a) deriving Show

-- 木 t に要素 x を左側から潜り込ました木のリストを返す
insleft :: a -> Tree a -> [Tree a] 
insleft x t = (Branch (Leaf x) t): insleft' x t
  where insleft' _ (Leaf _) = []
        insleft' x (Branch lt rt) = map (flip Branch rt) (insleft x lt)
        
trees :: [a] -> [Tree a] 
trees [x] = [Leaf x]
trees (x:xs) = trees xs >>= insleft x

--  n個の要素からできる二分木の数は (2n-2)!/(n!(n-1)!) 個

---
                        豊福
                        nobu_toyofuku / nifty.com


--
ML: haskell-jp / quickml.com
使い方: http://QuickML.com/