問題2.22 – SICP(計算機プログラムの構造と解釈)その39

問題2.22

Louis Reasoner の反復プロセスでの square-list

square した値を cons により結果となる answer(リスト) に繫げていくためにリストの値の順番が反転する。

SICP 問題2.22

(define (square-list items)
  (define (iter things answer)
    (if (null? things)
        answer
        (iter (cdr things)
              (cons (square (car things))
                    answer))))
  (iter items ()))

(square-list (list 1 2 3 4))
gosh> (16 9 4 1)

cons の引数を交換した square-list

answer(リスト) を cons によって square した値に繫げるために思った結果にならない。

(define (square-list items)
  (define (iter things answer)
    (if (null? things)
        answer
        (iter (cdr things)
              (cons answer ; answer はリスト
                    (square (car things))))))
  (iter items ()))

(square-list (list 1 2 3 4))
gosh> ((((() . 1) . 4) . 9) . 16)

思った結果を得るためには answer(リスト)とリスト化した square した値を append で結合する。

(define (square-list items)
  (define (iter things answer)
    (if (null? things)
        answer
        (iter (cdr things)
              (append answer
                      (list (square (car things)))))))
  (iter items ()))

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