haskell-ja > Archives > 2013/02/17

2013/02/17 04:39:34 UTChkamis
#
IFPH読書会ではお世話になっております。
昨日は急用のため中座し、大変失礼しました。

同書(日本語版)p.88「4.1.1 データ型としてのリスト」では、
Listの実装として、以下のコードが挙げられています。

data List α = Nil | Cons α (List α)

すぐ下にはConsの代わりに (:)、Nilの代わりに[]を使うあります。
そして、

[1,2,3] = 1 : 2 : 3 : []

が説明されています。

これだけだと話は上手く閉じるのですが、
その後 p.98になると、x:⊥, x:y:⊥などが擬リストとして紹介され、
[⊥,⊥]は⊥:⊥:[]だから擬リストでない、という話も出てきます。

プログラミングGauche p.44には、ドットリスト(dotted list)、
正式なリスト(proper list)が紹介されています。

上記の問題は、Schemeでいうこの2種のリストが対応するようだ、
と考えたのですが、この理解で正しいでしょうか。

よろしくお願いします。
2013/02/17 04:48:11 UTCnobsu
#
Scheme の proper list は nil または cdr 部が proper list であるようなドット対のことです.
#
IFPHの擬リストは⊥またはtail部が擬リストであるようなリストのことです.
2013/02/17 04:57:09 UTCnobsu
#
ここまでは似た論理構造ですが,擬リストの⊥はリストです.
2013/02/17 05:05:10 UTCnobsun
#
あれNicknameの最後の n が抜けた...
2013/02/17 06:01:19 UTChkamis
#
返信ありがとうございます。

同書p.8, l.4によると
「特定の型の値としては定義されない値を表す特別な記号⊥
(底要素、bottom)を導入すると便利である」とあります。

またp.30, l.3には、
「ブール値に2つではなく3つの値、すなわち、False, True,⊥
があることになる。実際すべてのデータ型宣言では無名値
すなわちそのデータ型の未定義値が追加導入される。」

とあります。

頂いた返信の内容と合わせ、次のように考えました。

「⊥は特殊な値で、至る所に追加される。したがって、
data List α = Nil | Cons α (List α)

に含まれていなくても、⊥はリストとして扱われる」

この認識で正しいでしょうか。
よろしくお願いします。
2013/02/17 09:52:03 UTCnobsun
#
はい,すべての型は⊥を値として含みます.
2013/02/17 10:57:14 UTChkamis
#
ありがとうございます。これで私の中で、全てクリアになりました。