開発環境
- OS X Mavericks - Apple(OS)
- Emacs (CUI)、BBEdit - Bare Bones Software, Inc. (GUI) (Text Editor)
- Scheme (プログラミング言語)
- Gauche (処理系)
計算機プログラムの構造と解釈(Gerald Jay Sussman(原著)、Julie Sussman(原著)、Harold Abelson(原著)、和田 英一(翻訳)、ピアソンエデュケーション、原書: Structure and Interpretation of Computer Programs (MIT Electrical Engineering and Computer Science)(SICP))の2(データによる抽象の構築)、2.1(データ抽象入門)、2.1.3(データとは何か)、問題 2.6.を解いてみる。
その他参考書籍
- Instructor's Manual to Accompany Structure & Interpretation of Computer Programs
- プログラミングGauche (Kahuaプロジェクト (著), 川合 史朗 (監修), オライリージャパン)
問題 2.6.
置き換えモデル。
;; one (add-1 zero) (add-1 (lambda (f) (lambda (x) x))) (lambda (f) (lambda (x) (f (((lambda (f) (lambda (x) x)) f) x)))) (lambda (f) (lambda (x) (f ((lambda (x) x) x)))) (lambda (f) (lambda (x) (f x)))
コード(BBEdit, Emacs)
sample.scm
#!/usr/bin/env gosh ;; -*- coding: utf-8 -*- ;; これまでに書いた手続き ;; (load "./procedures.scm") (define zero (lambda (f) (lambda (x) x))) (define one (lambda (f) (lambda (x) (f x)))) (define two (lambda (f) (lambda (x) (f (f x))))) (define (+ n m) (lambda (f) (lambda (x) ((m f) ((n f) x))))) (define zero1 (+ zero zero)) (define one1 (+ zero one)) (define two1 (+ one one)) (define three1 (+ one two)) (define three2 (+ two one)) (define three3 (+ one1 two)) (define three4 (+ one1 two1)) (define three5 (+ two1 one)) (define four1 (+ one three1)) (define four2 (+ two two)) (for-each (lambda (n) (print ((n (lambda (x) (- x 1))) 5))) (list zero zero1 one one1 two two1 three1 three2 three3 three4 three5 four1 four2))
入出力結果(Terminal(gosh), REPL(Read, Eval, Print, Loop))
$ ./sample.scm 5 5 4 4 3 3 2 2 2 2 2 1 1 $
0 コメント:
コメントを投稿