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
空リストはヌルなのか。
今日は取り立てて言うことはないなぁ。