2016年8月26日金曜日

開発環境

  • 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.19.を取り組んでみる。

その他参考書籍

問題1.19.

コード(Emacs)

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

  (define fib
    (lambda (n)
      (fib-iter 1 0 0 1 n)))

  (define p1
    (lambda (p q)
      (+ (expt p 2)
         (expt q 2))))
  (define q1
    (lambda (p q)
      (+ (* 2 p q)
         (expt q 2))))
      
    
  (define fib-iter
    (lambda (a b p q count)
      (if (= count 0)
          b
          (if (even? count)
              (fib-iter a
                        b
                        (p1 p q)
                        (q1 p q)
                        (/ count 2))
              (fib-iter (+ (* b q) (* a q) (* a p))
                        (+ (* b p) (* a q))
                        p
                        q
                        (- count 1))))))
                      

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

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

$ ksi < sample19.scm
ksi> 
0: 0
1: 1
2: 1
3: 2
4: 3
5: 5
6: 8
7: 13
8: 21
9: 34
10: 55
=> done
ksi>
$

0 コメント:

コメントを投稿