2013年4月20日土曜日

開発環境

計算機プログラムの構造と解釈(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 コメント:

コメントを投稿