開発環境
- OS X Lion - Apple(OS)
- Emacs、BBEdit - Bare Bones Software, Inc. (Text Editor)
- プログラミング言語: MIT/GNU Scheme
計算機プログラムの構造と解釈(Gerald Jay Sussman(原著)、Julie Sussman(原著)、Harold Abelson(原著)、和田 英一(翻訳)、ピアソンエデュケーション)の2(データによる抽象の構築)、2.2(階層データ構造と閉包)、2.2.1(並びの表現)の問題 2.21、問題 2.22、問題 2.23を解いてみる。
その他参考書籍
問題 2.21
コード
sample.scm
(define (square-list-1 items) (if (null? items) items (cons (square (car items)) (square-list-1 (cdr items))))) (define (square-list-2 items) (map square items))
入出力結果(Terminal, REPL(Read, Eval, Print, Loop))
1 ]=> (square-list-1 (list 1 2 3 4)) ;Value 2: (1 4 9 16) 1 ]=> (square-list-2 (list 1 2 3 4)) ;Value 3: (1 4 9 16)
問題 2.22
問題の定義が考えていたのと逆の順に答えのリストを作るのは、反復的プロセスの再帰のところで、数の二乗を順に先頭に追加していっているから。
引数を交換して虫をとろうとしても動かないのは、再帰的手続きで、リストと数値を二乗したものの対を作成していくから。
せっかくなので、反復的プロセスで動くものを作成。
コード
sample.scm
(define (square-list items) (define (iter items answer) (if (null? items) answer (iter (cdr items) (append answer (list (square (car items))))))) (iter items (list)))
入出力結果(Terminal, REPL(Read, Eval, Print, Loop))
1 ]=> (square-list (list 1 2 3 4)) ;Value 4: (1 4 9 16)
問題 2.23
コード
sample.scm
(define (for-each proc items) (cond ((null? items) true) (else (proc (car items)) (for-each proc (cdr items)))))
入出力結果(Terminal, REPL(Read, Eval, Print, Loop))
1 ]=> (for-each (lambda (x) (newline) (display x)) (list 57 521 88)) 57 521 88 ;Value: #t
0 コメント:
コメントを投稿