問題4.39、問題4.40 – SICP(計算機プログラムの構造と解釈)その213
問題4.39 制限の順序は解には影響しない。 解を見いだす時間は、計算に失敗する場合が多い条件を上にすると速くなる。 問題4.40 (define (multiple-dwelling) (let ((backer (amb 1 2 3 4 5))) (require (not (= backer 5))) (let ((cooper (amb 1 2 3 4 5))) (require (not…続きを読む
問題4.39 制限の順序は解には影響しない。 解を見いだす時間は、計算に失敗する場合が多い条件を上にすると速くなる。 問題4.40 (define (multiple-dwelling) (let ((backer (amb 1 2 3 4 5))) (require (not (= backer 5))) (let ((cooper (amb 1 2 3 4 5))) (require (not…続きを読む
問題4.38 p249 の multiple-dwelling 手続きの (require (not (= (abs (- smith fletcher)) 1))) 部分を削除するだけでよい。 (define (require p) (if (not p) (amb))) (define (multiple-dwelling) (let ((backer (amb 1 2 3 4 5)) (co…続きを読む
問題4.37 an-integer-between に変数名を引数として渡し、low の値を印字するように修正する。 (define (an-integer-between low high val-name) (require (<= low high)) (begin (print val-name " is " low) (amb low (an-integer-b…続きを読む
問題4.36 単純に an-integer-between を an-integer-starting-from に変更しただけでは、任意の Pythagoras 三角形を生成する方法として適切でない理由は。 an-integer-starting-from は継続を失敗することが無いために無限に継続するので、バックトラックできないため計算ができない。 正常に計算できるためには、最大値を与えて継続…続きを読む
問題4.35 最初に思いついた解答がこれ。 2つの整数間の数からなるリストを作り、 an-element-of でその内の1つの整数を返す。 (define (require p) (if (not p) (amb))) (define (an-element-of items) (require (not (null? items))) (amb (car items) (an-element-…続きを読む
4.3.3 amb 評価器の実装 問題を解いていく前に、先に4.3.3節に進み amb 評価器を実装する。 以下が4.1.7節の評価器をベースにして、4.3.3節の解説に基づき実装した amb 評価器。 (define true #t) (define false #f) ;; 基盤の apply への参照を apply-in-underlying-scheme へ退避させる(こうすることで、基盤…続きを読む
問題4.33 元の評価器でのクォート式の実行結果 ;;; L-Eval input: (define (cons x y) (lambda (m) (m x y))) ;;; L-Eval value: ok ;;; L-Eval input: (define (car z) (z (lambda (p q) p))) ;;; L-Eval value: ok ;;; L-Eval input: …続きを読む
問題4.32 3章のストリームと4.2.3節の遅延評価リストとの間の違いは、リストの car の部分を遅延評価するかどうかである。 以下のように4.2.3節の遅延評価リストでは、未定義の x, y を使ったリストを定義できる。 ;;; L-Eval input: (define st (cons x y)) ;;; L-Eval value: ok ;;; L-Eval input: st ;;;…続きを読む
問題4.31 この問題は、参考サイト(SICP 4.2.2 Ex. 4.27 Ex. 4.28 Ex. 4.29 Ex. 4.30 Ex. 4.31 – nakayama-blog)の写経で済ませる。 make-procedure にリーダーマクロを付けて modifier の状態を可視化する。 (define (make-procedure parameters body env) …続きを読む
問題4.30 並びの中の式の内、最後の式以外(途中の式)の引数は評価されず遅延される。 途中の式でも基本手続きの場合はその引数は評価される。 並び(元々のバージョン) (define (eval-sequence exps env) (cond ((last-exp? exps) (eval (first-exp exps) env)) (else (eval (first-exp exps) e…続きを読む