Schemeにおけるlistの実際

listはペアのペアである

英語が読める方:SICP英語版のfull-textから2.2.1 Representing Sequences辺りをお読みください。

英語なんて読めない or 嫌い or 読むのめんどくせな方:もうしばらくお待ちください

内部ではどうなっているのか?

上に同じ

謎のドット

リストを印字したときに、ドットが現れたり現れなかったりするのはどういうことでしょうか?

一言でいうと、これは「ある条件の時にはドットを表示しない略式を使うことになっている」からです。
基本的にすべてドットがあるのですが、省略されているのです。

上の節で(まだちゃんと書いてませんが・・・)リストはペアのペアであることを見ました。
ペアのcar部とcdr部の区切りには必ずドットがつきます。
ですから、省略せずに書くとすれば

(cons 1 2) → (1 . 2)
(cons (cons 1 2) (cons 3 4)) → ((1 . 2) . (3 . 4))
(list 1 2 3) → (1 . (2 . (3. ())))

となります。

では省略するルールを見ていきましょう。
といっても一つだけですが。

  1. ドットの直後がカッコでくくられたペアなら、そのドットとカッコを省略する これを内側から順に適用すると(外側からでも問題ありませんが)
    (list 1 2 3) → (1 . (2 . (3. ()))) → (1 . (2 . (3))) → (1 . (2 3)) → (1 2 3)
                                ~~~~               ~~~ ~         ~~~   ~
    となります。

    なぜこのようなルールで省略するのかは正確には知りませんが、恐らくリストを見やすく書くためであろうと思われます。

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS