2.2.1 並びの表現 – SICP(計算機プログラムの構造と解釈)その34
2008年12月10日
並びの表現
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)
計算機プログラムの構造と解釈
posted with amazlet at 08.11.07
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
ピアソンエデュケーション
売り上げランキング: 6542