2015年3月9日月曜日

開発環境

計算機プログラムの構造と解釈[第2版](ハロルド エイブルソン (著)、ジュリー サスマン (著)、ジェラルド・ジェイ サスマン (著)、Harold Abelson (原著)、Julie Sussman (原著)、Gerald Jay Sussman (原著)、和田 英一 (翻訳)、翔泳社、原書: Structure and Interpretation of Computer Programs (MIT Electrical Engineering and Computer Science)(SICP))の1(手続きによる抽象の構築)、1.3(高階手続きによる抽象)、1.3.4(値として返される手続き)、問題 1.45.を解いてみる。

その他参考書籍

問題 1.45.

コード(BBEdit, Emacs)

(define abs (lambda (x) (if (< x 0)
                            (* -1 x)
                            x)))

(define tolerance 0.00001)
(define fixed-point
  (lambda (f first-guess)
    (define close-enough?
      (lambda (v1 v2)
        (< (abs (- v1 v2)) tolerance)))
    (define try
      (lambda (guess)
        ((lambda (next)
           (if (close-enough? guess next)
               next
               (try next)))
         (f guess))))
    (try first-guess)))

(define average (lambda (x y) (/ (+ x y) 2)))
(define average-damp
  (lambda (f)
    (lambda (x) (average x (f x)))))

(define compose
  (lambda (f g)
    (lambda (x)
      (f (g x)))))

(define repeated
  (lambda (f n)
    (if (= n 1)
        f
        (compose f
                 (repeated f (- n 1))))))

(define n-root
  (lambda (n x)
    (fixed-point (average-damp (lambda (y) (/ x y)))
                 1.0)))

(define pow-iter
  (lambda (a n result)
    (if (= n 0)
        result
        (pow-iter a (- n 1) (* a result)))))

(define pow
  (lambda (a n)
    (pow-iter a n 1)))

(define m-average-damp-n-root
  (lambda (m n x)
    (fixed-point ((repeated average-damp m)
                  (lambda (y)
                    (begin (display y) (newline)
                           (/ x
                              (pow y
                                   (- n 1))))))
                 1.0)))

(m-average-damp-n-root 2 4 16)
(m-average-damp-n-root 2 5 32)
(m-average-damp-n-root 3 10 1024)
(m-average-damp-n-root 5 10 1024)

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

$ kscheme < sample45.scm
In : Out: abs
In : Out: tolerance
In : Out: fixed-point
In : Out: average
In : Out: average-damp
In : Out: compose
In : Out: repeated
In : Out: n-root
In : Out: pow-iter
In : Out: pow
In : Out: m-average-damp-n-root
In : 0.1e1
0.475e1
0.359982322495990669193e1
0.278561393166591054479e1
0.227426391056100801421e1
0.204574373051705326259e1
0.200151153140988696742e1
0.200000171138944850312e1
Out: 0.200000000000219663724e1
In : 0.1e1
0.875e1
0.656386476468138275718e1
0.492720831765459301937e1
0.370897956455810908031e1
0.282400856458819976994e1
0.224379058203520776295e1
0.199846016639696590571e1
0.200038792683017183072e1
0.199990320632854122259e1
0.200002421013026691012e1
0.19999939482000785444e1
Out: 0.20000015129957609938e1
In : 0.1e1
0.128875e3
0.112765625000000000013e3
0.986699218750000000548e2
0.863361816406250001923e2
0.755441589355468756485e2
0.661011390686035177897e2
0.578384966850280833789e2
0.506086845993995906273e2
0.442825990244747005728e2
0.387472741464155584856e2
0.339038648781142638638e2
0.296658817683521434354e2
0.259576465473153182502e2
0.227129407289248268269e2
0.198738231378887935291e2
0.17389595245917347559e2
0.152158958410579264249e2
0.13313908863853423756e2
0.116496702656095211425e2
0.101934615147965651972e2
0.891927893317156756083e1
0.780436942482136680572e1
0.682882443842599761661e1
0.597522534728317745599e1
0.522833536208887662592e1
0.457483728874232722149e1
0.400312845168040248167e1
0.350322225285291696578e1
0.306693011966940662691e1
0.268889566936308596821e1
0.237020356043004142029e1
0.212814557367881888894e1
0.200508192624267906809e1
0.199880148238132751025e1
0.200030367829777903018e1
0.199992433965139859483e1
0.200001893118950734894e1
0.199999526821055987537e1
Out: 0.200000118301033197798e1
In : 0.1e1
0.3296875e2
0.319384765625006953887e2
0.309403991699234740422e2
0.299735116958645969284e2
0.290368394553704670192e2
0.281294382223923206748e2
0.27250393277945462674e2
0.263988184880135288119e2
0.255738554102682451661e2
0.247746724287042013712e2
0.240004639153162958599e2
0.232504494179747724259e2
0.225238728736791771791e2
0.218200018463981496858e2
0.211381267887267477028e2
0.204775603266170165337e2
0.198376365664607760255e2
0.19217710423826134258e2
0.186171569731710700637e2
0.180353708178785790528e2
0.174717654799783716424e2
0.169257728089399680585e2
0.163968424089412753145e2
0.158844410840353753981e2
0.153880523006563227284e2
0.149071756669222627561e2
0.144413264282111629021e2
0.139900349785009128029e2
0.135528463869815247428e2
0.13129319939462670091e2
0.127190286941148481519e2
0.123215590510971272834e2
0.119365103356386551412e2
0.115634943941550411063e2
0.112021352029943116258e2
0.108520684894204796741e2
0.105129413644559163465e2
0.10184411967216745595e2
0.986614912038850411504e1
0.955783199650244849577e1
0.925914979468632121272e1
0.896980142757732832757e1
0.868949521809982696355e1
0.841794860582615457414e1
0.815488786265666312406e1
0.790004781757502246153e1
0.765317159025812032813e1
0.741401033334759510635e1
0.718232298322376302015e1
0.695787601916453186111e1
0.674044323082460310065e1
0.652980549403754193845e1
0.632575055503004418937e1
0.612807282325046956631e1
0.593657317316111025755e1
0.575105875553724241948e1
0.557134281907107520692e1
0.539724454341560109415e1
0.522858888524905360325e1
0.506520643953099012759e1
0.490693331890335213499e1
0.475361105522690563746e1
0.460508652861792611383e1
0.446121193117057174429e1
0.43218447749593089853e1
0.418684795709782723666e1
0.405608989882393427249e1
0.392944478108569108062e1
0.380679290629721643876e1
0.368802122526311043215e1
0.357302408024901664289e1
0.34617042303234352305e1
0.335397424382155021633e1
0.324975836512457983034e1
0.314899498807163264738e1
0.305163989357525966062e1
0.295767042827219617376e1
0.286709080191639591558e1
0.277993864067674278972e1
0.269629281170085213293e1
0.261628226767995481205e1
0.254009515803400312577e1
0.246798660998827188383e1
0.240028232956943547317e1
0.233737360864528394386e1
0.227969795449364270184e1
0.222769956984682274292e1
0.218176715866328991238e1
0.214215457575810076595e1
0.210890160252021187389e1
0.2081781581632054904e1
0.206030051850959973055e1
0.204375432749111011997e1
0.203132591650698377097e1
0.202218871572465424153e1
0.201558729131632902395e1
0.201088232660099396255e1
0.200756323261157782631e1
0.200523939149032349264e1
0.200362119933523418128e1
0.200249873380027629296e1
0.200172224953270468884e1
0.200118612555522617965e1
0.200081644839413896013e1
0.200056177626494991406e1
0.20003864428548315932e1
0.200026578439168474269e1
0.20001827764147844863e1
0.20001256822667454264e1
0.200008641766241393407e1
0.200005941739302397022e1
0.200004085193976479735e1
0.200002808688193235996e1
Out: 0.200001931028597622054e1
In : $

0 コメント:

コメントを投稿