計算機プログラムの構造と解釈[第2版]
(翔泳社)
ハロルド エイブルソン (著) ジュリー サスマン (著)
ジェラルド・ジェイ サスマン (著)
Harold Abelson (原著) Julie Sussman (原著)
Gerald Jay Sussman (原著) 和田 英一 (翻訳)
開発環境
- OS X Yosemite - Apple (OS)
- Emacs (CUI)、BBEdit - Bare Bones Software, Inc. (GUI) (Text Editor)
- Scheme (プログラミング言語)
- kscheme, Gauche (処理系)
計算機プログラムの構造と解釈[第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.を解いてみる。
その他参考書籍
- Instructor's Manual to Accompany Structure & Interpretation of Computer Programs
- プログラミングGauche (Kahuaプロジェクト (著), 川合 史朗 (監修), オライリージャパン)
- Scheme手習い
問題 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 コメント:
コメントを投稿