Browsing articles in "SICP"
1月
27
2010
27
2010
SICP解答 1.1 ~ 1.10
![]() |
計算機プログラムの構造と解釈 Gerald Jay Sussman ピアソンエデュケーション 2000-02 |
問題 1.1
1 ]=> 10
;Value: 10
1 ]=> (+ 5 3 4)
;Value: 12
1 ]=> (+ 5 3 4)
;Value: 12
1 ]=> (-9 1)
;Value: 8
1 ]=> (/ 6 2)
;Value: 3
1 ]=> (+ (* 2 4) (- 4 6))
;Value: 6
1 ]=> (define a 3)
;Value: a
1 ]=> (define b (+ a 1))
;Value: b
1 ]=> (+ a b (* a b))
;Value: 19
1 ]=> (= a b)
;Value: #f
1 ]=> (if
(and (> b a) (< b (* a b)))
b
a)
;Value: 4
1 ]=> (cond ((= a 4) 6)
((= b 4) (+ 6 7 a))
(else 25))
;Value: 16
1 ]=> (+ 2 (if (> b a) b a))
;Value: 6
1 ]=> (* (cond ((> a b) a)
((< a b) b)
(else -1))
(+ a 1))
;Value: 16
問題 1.2
(/ (+ 5 4 (- 2 (- 3 (+ 6 (/ 4 5))))) (* 3 (- 6 2) (- 2 7)))
問題 1.3
(define (square x) (* x x))
(define (sum-of-squareas x y)(+ (square x)(square y)))
(define
(max-sum-of-squareas a b c) (
if (> a b)
(
if (> b c)
(sum-of-squareas a b)
(sum-of-squareas a c)
)
(
if (> a c)
(sum-of-squareas a b)
(sum-of-squareas b c)
)
)
)
問題 1.4
普通に使える。手続きの意味は、名前の通り、 a + bの絶対値
問題 1.5
作用的順序では、(p)が評価されるので、循環参照に陥る。正規順序では、(p)が評価されることなく、0を返し正常に終了する。
問題 1.6
保留
問題 1.7
保留
問題 1.8
(define (cbrt-iter guess x)
(if (good-enough? guess x)
guess
(cbrt-iter (improve guess x) x)
)
)
(define (good-enough? guess x)
(< (abs (- (cube guess) x)) 0.001)
)
(define (cube x) (* x x x))
(define (improve guess x)
(/ (+ (/ x (* guess guess)) (* 2 guess)) 3)
)
(define (cbrt x) (cbrt-iter 1.0 x))
問題 1.9
保留
問題 1.10
1 ]=> (A 1 10)
;Value: 1024
1 ]=> (A 2 4)
;Value: 65536
1 ]=> (A 3 3)
;Value: 65536
f(n) = 2n
g(n) = 2^n
h(n) = 2^h(n-1)
ただし、h(0) = 1
9月
16
2009
16
2009
MIT/GNU Schemeを動かしてみる
Windowsでの手順です。ちょっとまだ使い方が分かってないので、おかしなことかいてるかもしれません
ダウンロード&インストール
MIT/GNU Scheme – GNU Project – Free Software Foundation (FSF) の Windows binaryをクリックしてダウンロードする。
あとは、普通の手順でインストールするだけです。
実行
デスクトップに現れたアイコンをクリックするとEmacsライクなエディタ、EdwinとMIT/GNU Schemeが立ち上がります。
MIT/GNU Schemeのほうで、Ctrl-Uを打つと、REPLモードになります。
(identify-world)とか打つといろいろ情報を教えてくれたりします。
(cd “C:\\hoge”)でディレクトリ移動。
(pwd)でカレントディレクトリ表示なども。
終わるときは、(exit)です。


An article by yuyak