2014年1月19日日曜日

開発環境

計算機プログラムの構造と解釈(Gerald Jay Sussman(原著)、Julie Sussman(原著)、Harold Abelson(原著)、和田 英一(翻訳)、ピアソンエデュケーション、原書: Structure and Interpretation of Computer Programs (MIT Electrical Engineering and Computer Science)(SICP))の1(手続きによる抽象の構築)、1.1(プログラミングの要素)、1.1.6(条件式と述語)、問題 1.5.を解いてみる。

その他参考書籍

問題 1.5.

作用的順序の評価を使う解釈系の場合

  1. xを0、yを(p)に置き換え
  2. 第一引数の評価(0)
  3. 0
  4. 第二引数の評価(p)
  5. (p)
  6. (p)の評価
  7. (p)
  8. 循環

正規順序の評価を使う解釈系の場合

  1. xを0、yを(p)に置き換え
  2. ifの述語、(= 0 0)を評価
  3. consequent(0)

確認。(Lisp(Scheme)の解釈系は作用的順序の評価を使うので循環する。)

入出力結果(Terminal, REPL(Read, Eval, Print, Loop))

$ gosh
gosh> (define (p) (p))
p
gosh> 
(define (test x y)
  (if (= x 0)
      0
      y))
test
gosh> (test 0 (p))
^C*** UNHANDLED-SIGNAL-ERROR: unhandled signal 2 (SIGINT)
Stack Trace:
_______________________________________
  0  (p)
        At line 7 of "(stdin)"
gosh> (exit)
$

正規順序の評価を使う解釈系の場合は、正規順序の評価を使うHaskellで確認してみる。

入出力結果(Terminal, インタプリタghci)

$ ghci
GHCi, version 7.6.3: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude> let p = p
Prelude> let test x y = if x == 0 then 0 else y
Prelude> test 0 p
0
Prelude> :quit
Leaving GHCi.
$

0 コメント:

コメントを投稿