リストの写像、問題2.21 – SICP(計算機プログラムの構造と解釈)その38
2008年12月14日
リストの写像
リストの各数値を与えられた引数倍する手続き square-list
。
(define (scale-list items factor) (if (null? items) () (cons (* (car items) factor) (scale-list (cdr items) factor)))) (scale-list (list 1 2 3 4 5) 10) gosh> (10 20 30 40 50)
手続きmap
手続きmap
は引数として手続きとリストをとり、その手続きをリストの各要素に作用させて得られるリストを返す。
(map + (list 1 2 3) (list 40 50 60) (list 700 800 900)) gosh> (741 852 963) (map (lambda (x y) (+ x (* 2 y))) (list 1 2 3) (list 4 5 6)) gosh> (9 12 15)
手続きmap
を使った scale-list
の再定義
(define (scale-list items factor) (map (lambda (x) (* x factor)) items)) (scale-list (list 1 2 3 4 5) 10) gosh> (10 20 30 40 50)
手続きmap
を使うことによって抽象の壁を作り、リストの要素を取り出し操作する細部を隔離する。
問題2.21
再帰的構造の square-list
(define (square-list items) (if (null? items) () (cons (square (car items)) (square-list (cdr items))))) (square-list (list 1 2 3 4)) gosh> (1 4 9 16)
手続きmap
を使った square-list
(define (square-list items) (map (lambda (x) (square x)) items)) (square-list (list 1 2 3 4)) gosh> (1 4 9 16)
計算機プログラムの構造と解釈
posted with amazlet at 08.11.07
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
ピアソンエデュケーション
売り上げランキング: 6542