2008-02-17から1日間の記事一覧

問題1.8

立方根を求める手続きを作成せよ improveのみ、立方根の手続きに変更すれば良い せっかくなので、good-enough?等はAnswerBook1.7を参考に作ることにした 共通関数は別ファイルにまとめることにした(sicp-lib.scm - おんがえしの日記) (load "sicp-lib.scm") …

問題1.7

1.1.7節で作成した、sqrtの弱点を解析せよ また、その弱点を改良せよ とりあえず、検証用手続きを作る (define (sqrt-test x) (/ (square (sqrt x)) x)) 非常に小さい数の場合、閾値よりも小さい数になると精度が悪くなる。 再帰が少ない回数で終了してしま…

問題1.6

通常版では (sqrt 2) ==> 1.41421568627451 new-if版では ==> ERROR: Stack overflow ==> ABORT: (stack-overflow) ifでは述語がtrueにならない限りelse節が評価されないが、 new-ifはただの手続きのため、呼び出されてすぐにthen節、else節が評価されてしま…

問題1.5

(define (p) (p)) (define (test x y) (if (= x 0) 0 y)) 作用的順序の場合 無限ループする (test 0 (p)) => (test 0 (p)) => (test 0 (p (p (p) (p))))... 正規順序の場合 まず関数testを展開する (test x y) => (if (= x 0) 0 y) ;xを代入する(yはまだ) =>…

問題1.4

とりあえず関数を動かしてみて、どのような振る舞いをするか確かめる a-plus-abs-b は a + abs(b) のことだということは動かせば分かる。 (define (a-plus-abs-b a b) ((if (> b 0) + -) a b)) (a-plus-abs-b 1 2) ; 3 (a-plus-abs-b 1 -2) ; 3 (a-plus-abs-…

はてなダイアリー向けの環境整備

XKeymacsをインストール。 FireFoxをEmacsキーバインドで操作できると便利だなあ。

Meadow+cygwin でのscheme環境構築

Lispは本当に色々な実装があって迷う。 普段はMeadow+cygwinでプログラムしているので、試しにcygwin setupを覗いてみたら、Devel/guile-develを発見。 Meadowとの親和性がよいものがいいので、これを使うことに。id:higepon:20060415:1145108067さんの設定…

問題1.3

三つの数を引数として取り、大きい二つの数の二乗の和を返す手続きを定義せよ。 テキストで出てきた、square, sum-of-squaresを使いまわす ソートする必要は無い、一番小さい数が分かればよい (define (square x) (* x x)) ;(square 5) (define (sum-of-squa…

問題1.2

次の式を前置記法に翻訳せよ とりあえず書いてみる。 実行してみて、動くことを確認。 回答集を見て、同じ答えなことを確認 細かいことだけど、guileは有理数で出力されて、gaucheは小数で出力されるのね (/ (+ 5 4 (- 2 (- 3 (+ 6 (/ 4 5))))) (* 3 (- 6 2)…

問題1.1

式の列がある。それぞれの式が印字する結果は何か。列は示した順に評価するものとする問題1.1はインタプリタの使い方を覚えるのがメイン。 問題を正しく打ち込み、結果を考え記入。インタプリタで結果を答え合わせ。 10 ; 10 (+ 5 3 4) ; 12 (- 9 1) ; 8 (/ …