開発環境
- macOS Sierra - Apple (OS)
- Emacs (Text Editor)
- Scheme (プログラミング言語)
- kscheme (ksi)(github) (処理系)
計算機プログラムの構造と解釈[第2版](ハロルド エイブルソン (著)、ジュリー サスマン (著)、ジェラルド・ジェイ サスマン (著)、Harold Abelson (原著)、Julie Sussman (原著)、Gerald Jay Sussman (原著)、和田 英一 (翻訳)、翔泳社、原著: Structure and Interpretation of Computer Programs (MIT Electrical Engineering and Computer Science)(SICP))の第2章(データによる抽象の構築)、2.2(階層データ構造と閉包性)、2.2.2(階層構造)、木の写像、問題2.30、31、32.を取り組んでみる。
その他参考書籍
問題2.30、31、32.
コード(Emacs)
(begin (load "procedures.scm") (newline) (define (p obj) (display obj) (newline)) (p '2.30) (define tree (list 1 (list 2 (list 3 4) 5) (list 6 7))) (define (square-tree-1 tree) (if (null? tree) '() (if (pair? tree) (cons (square-tree-1 (car tree)) (square-tree-1 (cdr tree))) (square tree)))) (p (square-tree-1 tree)) (define (square-tree-2 tree) (map (lambda (sub-tree) (if (pair? sub-tree) (square-tree-2 sub-tree) (square sub-tree))) tree)) (p (square-tree-2 tree)) (p '2.31) (define (tree-map proc tree) (map (lambda (sub-tree) (if (pair? sub-tree) (tree-map proc sub-tree) (proc sub-tree))) tree)) (define (square-tree tree) (tree-map square tree)) (p (square-tree tree)) (p '2.32) (define s (list 1 2 3)) (define (subsets s) (if (null? s) (list '()) ((lambda (rest) (append rest (map (lambda (subset) (cons (car s) subset)) rest))) (subsets (cdr s))))) (p (subsets s)) 'done)
入出力結果(Terminal(kscheme), REPL(Read, Eval, Print, Loop))
$ ksi < sample30.scm ksi> 2.3 (1 (4 (9 16) 25) (36 49)) (1 (4 (9 16) 25) (36 49)) 2.31 (1 (4 (9 16) 25) (36 49)) 2.32 (() (3) (2) (2 3) (1) (1 3) (1 2) (1 2 3)) => done ksi> $
0 コメント:
コメントを投稿