2016年8月25日木曜日

開発環境

  • OS X El Capitan - 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))の第1章(手続きによる抽象の構築)、1.2(手続きとその生成するプロセス)、1.2.4(べき乗)、問題1.18.を取り組んでみる。

その他参考書籍

問題1.18.

コード(Emacs)

(begin
  (newline)
  (load "procedures.scm")

  (define double (lambda (x) (+ x x)))
  (define halve (lambda (x) (/ x 2)))

  (define iter
    (lambda (a b result)
      (if (= b 0)
          result
          (if (even? b)
              (iter (double a) (halve b) result)
              (iter a (- b 1) (+ result a))))))
  
  (define *
    (lambda (a b)
      (iter a b 0)))

  (define nums '(0 1 2 3 4 5 6 7 8 9 9))
  (for-each (lambda (a)
              (for-each (lambda (b)
                          (display "(* ")
                          (display a)
                          (display " ")
                          (display b)
                          (display "): ")
                          (display (* a b))
                          (newline))
                        nums))
            nums)
  'done)

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

$ ksi < sample18.scm
ksi> 
(* 0 0): 0
(* 0 1): 0
(* 0 2): 0
(* 0 3): 0
(* 0 4): 0
(* 0 5): 0
(* 0 6): 0
(* 0 7): 0
(* 0 8): 0
(* 0 9): 0
(* 0 9): 0
(* 1 0): 0
(* 1 1): 1
(* 1 2): 2
(* 1 3): 3
(* 1 4): 4
(* 1 5): 5
(* 1 6): 6
(* 1 7): 7
(* 1 8): 8
(* 1 9): 9
(* 1 9): 9
(* 2 0): 0
(* 2 1): 2
(* 2 2): 4
(* 2 3): 6
(* 2 4): 8
(* 2 5): 10
(* 2 6): 12
(* 2 7): 14
(* 2 8): 16
(* 2 9): 18
(* 2 9): 18
(* 3 0): 0
(* 3 1): 3
(* 3 2): 6
(* 3 3): 9
(* 3 4): 12
(* 3 5): 15
(* 3 6): 18
(* 3 7): 21
(* 3 8): 24
(* 3 9): 27
(* 3 9): 27
(* 4 0): 0
(* 4 1): 4
(* 4 2): 8
(* 4 3): 12
(* 4 4): 16
(* 4 5): 20
(* 4 6): 24
(* 4 7): 28
(* 4 8): 32
(* 4 9): 36
(* 4 9): 36
(* 5 0): 0
(* 5 1): 5
(* 5 2): 10
(* 5 3): 15
(* 5 4): 20
(* 5 5): 25
(* 5 6): 30
(* 5 7): 35
(* 5 8): 40
(* 5 9): 45
(* 5 9): 45
(* 6 0): 0
(* 6 1): 6
(* 6 2): 12
(* 6 3): 18
(* 6 4): 24
(* 6 5): 30
(* 6 6): 36
(* 6 7): 42
(* 6 8): 48
(* 6 9): 54
(* 6 9): 54
(* 7 0): 0
(* 7 1): 7
(* 7 2): 14
(* 7 3): 21
(* 7 4): 28
(* 7 5): 35
(* 7 6): 42
(* 7 7): 49
(* 7 8): 56
(* 7 9): 63
(* 7 9): 63
(* 8 0): 0
(* 8 1): 8
(* 8 2): 16
(* 8 3): 24
(* 8 4): 32
(* 8 5): 40
(* 8 6): 48
(* 8 7): 56
(* 8 8): 64
(* 8 9): 72
(* 8 9): 72
(* 9 0): 0
(* 9 1): 9
(* 9 2): 18
(* 9 3): 27
(* 9 4): 36
(* 9 5): 45
(* 9 6): 54
(* 9 7): 63
(* 9 8): 72
(* 9 9): 81
(* 9 9): 81
(* 9 0): 0
(* 9 1): 9
(* 9 2): 18
(* 9 3): 27
(* 9 4): 36
(* 9 5): 45
(* 9 6): 54
(* 9 7): 63
(* 9 8): 72
(* 9 9): 81
(* 9 9): 81
=> done
ksi> $

0 コメント:

コメントを投稿