早川です。

On Sun, 13 Apr 2003 13:03:06 +0900
Tanaka Akira <akr / m17n.org> wrote:
> > foo (x:xs)    = ...  はOKなのに
> > foo (xs++[x]) = ...  という定義がエラーになるのは何故だろうと
> > 疑問に思っていました。
> >
> > : と ++ は、同じくリストを生成しますが、後者はユニークに
> > 定まらないのでリストコンストラクタになれないからだそうです。
> > 当然といえば当然なのですが..感心してしまいました (^^;
> 
> ユニークに定まるかどうかは関係ないんじゃないでしょうか。あるリストに対
> して、xs++[x] という式がそのリストを生成するような xs と x は高々ひと
> つしかないという意味で、x:xs と xs++[x] は同程度のユニークさで x と xs
> を定めると思います。
> 
> 後者が使えないのは単にコンストラクタではないからというだけなんじゃない
> かなぁ。

はい、僕もそれで納得しましたし、前回のメールにもそう書いたつもりです..
++ がコンストラクタになれなかったのは、ユニークに定まらないから
という理由を知って感心しました。
-- x:xs と xs++[x] の比較では、うまくいくもしれませんが


--
SH
tetryl / tokyoprogrammer.com


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