Chapter 2 データ型 - 2.2 合成データ型 - 2.2.3 ドット対とリスト (2)

リストに入る前に復習。

gosh> (cons 1 (cons 2 (cons 3 (cons 4 5))))
(1 2 3 4 . 5)
gosh> '(1 2 3 4 . 5)
(1 2 3 4 . 5)
gosh> (define x (cons 1 (cons 2 (cons 3 (cons 4 5)))))
x
gosh> x
(1 2 3 4 . 5)
gosh> (cddddr x)
5

cddddr ってアレっぽいな。

gosh> (define URYYYY (lambda (v) (cddddr v)))
URYYYY
gosh> (URYYYY x)
5

よしっ。


待ってました!リスト!


空リスト:

gosh> '()
()


リスト:

gosh> (list 1 2 3 4)
(1 2 3 4)
gosh> '(1 2 3 4)
(1 2 3 4)
gosh> '(1 . (2 . (3 . (4 . ()))))
(1 2 3 4)

うーむ。書き方がいっぱいあるな。リストからドット対を想像するのが大変なんだけど、訓練する必要あります?

gosh> (define y (list 1 2 3 4))
y
gosh> (list-ref y 0)
1
gosh> (list-ref y 3)
4
gosh> (list-tail y 1)
(2 3 4)
gosh> (list-tail y 3)
(4)
gosh> (cdr y)
(2 3 4)
gosh> (cdddr y)
(4)

cddddr 以上は list-tail 使えば良いのだな?

gosh> (pair? '(1 . 2))
#t
gosh> (pair? '(1 2))
#t
gosh> (pair? '(1 2 3 4))
#t

リストは常にドット対なわけだな。


gosh> (pair? '())
#f
gosh> (pair? '(() . ()))
#t

空が2つでもドット対。っていうかペアって呼んじゃダメ?

gosh> (list? '())
#t
gosh> (list? '(1 2))
#t
gosh> (list? '(1 . 2))
#f
gosh> (list? '(1 . (2 . ())))
#t

ドット対は常にリストってわけじゃない。

gosh> (null? '())
#t
gosh> (null? '(1 2))
#f
gosh> (null? '(1 . 2))
#f

空リストはヌルなのか。


今日は取り立てて言うことはないなぁ。