2.2.1 並びの表現 – SICP(計算機プログラムの構造と解釈)その34

並びの表現

gauche では nil() で表現する。

(define list1 (cons 1
                    (cons 2
                          (cons 3
                                (cons 4 ())))))
list1
gosh> (1 2 3 4)
(define list2 (list 1 2 3 4))
list2
gosh> (1 2 3 4)

(car list1)
gosh> 1

(cdr list1)
gosh> (2 3 4)

(car (cdr list1))
gosh> 2

(cadr list1)
gosh> 2

(cons 10 list1)
gosh> (10 1 2 3 4)

nil という言葉はラテン語の「何もない」という意味の語 nihil の短縮形である。

リスト演算

list-ref

list-ref はリストと数値nを引数にとり、リストのn番目のものを返す。

(define (list-ref items n)
  (if (= n 0)
      (car items)
      (list-ref (cdr items) (- n 1))))

(list-ref '(5 2 6 10 4) 2)
gosh> 6

length

リストの中身の個数を返す手続き length (再帰的プロセス)。

(define (length items)
  (if (null? items)
      0
      (+ 1 (length (cdr items)))))

(length '(5 2 6 10 4))
gosh> 5

リストの中身の個数を返す手続き length (反復プロセス)。

(define (length items)
  (define (length-iter a count)
    (if (null? a)
        count
        (length-iter (cdr a) (+ count 1))))
  (length-iter items 0))

(length '(5 2 6 10 4))
gosh> 5

append

引数としてとる2つのリストを結合して新しいリストを返す。

(append '(5 2 6 10 4) '(6 1 2 0 17))
gosh> (5 2 6 10 4 6 1 2 0 17)
(define (append list1 list2)
  (if (null? list1)
      list2
      (cons (car list1) (append (cdr list1) list2))))

(append '(5 2 6 10 4) '(6 1 2 0 17))
gosh> (5 2 6 10 4 6 1 2 0 17)
計算機プログラムの構造と解釈
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
«
»