開発環境
- OS X Lion - Apple(OS)
- Emacs、BBEdit - Bare Bones Software, Inc. (Text Editor)
- プログラミング言語: MIT/GNU Scheme
計算機プログラムの構造と解釈(Gerald Jay Sussman(原著)、Julie Sussman(原著)、Harold Abelson(原著)、和田 英一(翻訳)、ピアソンエデュケーション)の1(手続きによる抽象の構築)、1.1(プログラムの要素)、1.1.6(条件式と述語)の問題を解いてみる。
問題 1.1, 1.2, 1.3.
入出力結果(Terminal, REPL(Read, Eval, Print, Loop))
$ scheme MIT/GNU Scheme running under MacOSX Type `^C' (control-C) followed by `H' to obtain information about interrupts. Copyright (C) 2011 Massachusetts Institute of Technology This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Image saved on Friday April 13, 2012 at 9:02:52 AM Release 9.1.1 || Microcode 15.3 || Runtime 15.7 || SF 4.41 || LIAR/C 4.118 Edwin 3.116 1 ]=> 10 ; 10 (+ 5 3 4 ) ; 12 (- 9 1); 8 (/ 6 2) 3; (+ (* 2 4) (- 4 6)); 6 (define a 3) (define b (+ a 1)); a 3, b 4 (+ a b (* a b)); 19 (= a b); #f (if (and (> b a) (< b (* a b))) b a); 4 (cond ((= a 4) 6) ((= b 4) (+ 6 7 a)); 16 (else 25)) (+ 2 (if (> b a) b a)); 6 (* (cond ((> a b) a) ((< a b) b); 4 (else -1)) (+ a 1)); 16 (/ (+ 5 4 (- 2 (- 3 (+ 6 (/ 4 5))))) (* 3 (- 6 2) (- 2 7))); -37/150 (define (sum-of-top-two a b c) (cond ((and (< a b) (< a c)) (+ (* b b) (* c c))) ((and (< b a) (< b c)) (+ (* c c) (* a a))) (else (+ (* a a) (* b b))))) (sum-of-top-two 2 3 4) ; 25 (sum-of-top-two 2 4 3) (sum-of-top-two 3 2 4) (sum-of-top-two 3 4 2) (sum-of-top-two 4 2 3) (sum-of-top-two 4 3 2) ;Value: 10 1 ]=> ;Value: 12 1 ]=> ;Value: 8 1 ]=> ;Value: 3 1 ]=> ;Value: 3 1 ]=> ;Value: 6 1 ]=> ;Value: a 1 ]=> ;Value: b 1 ]=> ;Value: 19 1 ]=> ;Value: #f 1 ]=> ;Value: 4 1 ]=> ;Value: 16 1 ]=> ;Value: 6 1 ]=> ;Value: 16 1 ]=> ;Value: -37/150 1 ]=> ;Value: sum-of-top-two 1 ]=> ;Value: 25 1 ]=> ;Value: 25 1 ]=> ;Value: 25 1 ]=> ;Value: 25 1 ]=> ;Value: 25 1 ]=> ;Value: 25 1 ]=> ^D End of input stream reached. Moriturus te saluto. $
問題 1.4
振る舞い
(> b 0)が評価されて、 bが0より大きい場合 (define (a-plus-abs-b a b) (+ a b)) それ以外の場合 (define (a-plus-abs-b a b) (- a b))
問題 1.5
Benは、「引数を評価し、作用させる」方法の作用的順序の評価を使う解釈系では、最初に(test 0 (p))の(p)を評価をする際に無限ループ(Schemeで無限ループって言葉で合ってるのか分からない。。とりあえず、(define (p) (p))の評価がずっと終わらない。)が発生する。
「完全に展開し、簡約する評価方法」の正規順序の評価を使う解釈系では、その値が必要になるまで、非演算子を評価しないので、(=x 0)が最初に評価されて、そして0となる。((p)の値が必要になる事は無いので、(p)が評価されて無限ループになることはない。)
(Schemeは作用的順序の評価を使っているので、実際に試してみたところ、結果は前者になったので手動で終了。)
0 コメント:
コメントを投稿