問題5.6 – SICP(計算機プログラムの構造と解釈)その253
問題5.6 余分な save と restore は、afterfib-n-1 の (restore continue) と (save continue) の2ヶ所。 スタックから取り出したものをそのまま再びスタックに入れている。 (fib 4) として、n と val と continue のスタック処理内容を書き出してみる。 ; [n:value of n,(stack of n)], [v…続きを読む
問題5.6 余分な save と restore は、afterfib-n-1 の (restore continue) と (save continue) の2ヶ所。 スタックから取り出したものをそのまま再びスタックに入れている。 (fib 4) として、n と val と continue のスタック処理内容を書き出してみる。 ; [n:value of n,(stack of n)], [v…続きを読む
問題5.5 再帰的階乗計算機 (controller (assign continue (label fact-done)) fact-loop (test (op =) (reg n) (const 1)) (branch (label base-case)) ;; n と continue を退避し再帰呼び出しを設定する ;; 再帰呼び出しから戻る時 after-fact から ;; 計算が続…続きを読む
問題5.4 a. 再帰的べき乗 (define (expt b n) (if (= n 0) 1 (* b (expt b (- n 1))))) 再帰的べき乗を計算する計算機のデータパス図 再帰的べき乗を計算する計算機の制御器 (controller (assing b (op read)) (assing n (op read)) (assign continue (label expt-do…続きを読む
問題5.3 good-enough? と improve を基本演算として使う版 データパス図 レジスタ計算器言語での制御器の定義 (controller sqrt-loop (assign x (op read)) (assign guess (const 1.0)) test-good-enough (test (op good-enough?) (reg guess) (reg x)) (b…続きを読む
問題5.2 (controller initialize (assign product (const 1)) (assign counter (const 1)) test-counter (test (op >) (reg counter) (reg n)) (branch (label factorial-done)) (assign product (op *) (reg produ…続きを読む
問題5.1 いよいよ、最後の章に入る。 この問題では「一時的」レジスタは不要。 制御順で counter のインクリメントが後になるようにする。 計算機プログラムの構造と解釈 posted with amazlet at 08.11.07 ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン ピアソンエデュケーション 売り上げランキング: 6542 Amazon.co.jp で…続きを読む
問題4.76 ;; 新しい conjoin 手続き (define (conjoin conjuncts frame-stream) (if (empty-conjunction? conjuncts) frame-stream (merge-frame-streams (qeval (first-conjunct conjuncts) frame-stream) (conjoin (rest-c…続きを読む
問題4.75 (define (unique-query exps) (car exps)) (define (uniquely-asserted operands frame-stream) (stream-flatmap (lambda (frame) (let ((result (qeval (unique-query operands) (singleton-stream frame)))…続きを読む
問題4.74 a. (define (simple-stream-flatmap proc s) (simple-flatten (stream-map proc s))) (define (simple-flatten stream) (stream-map stream-car (stream-filter (lambda (s) (not (stream-null? s))) stream)…続きを読む
問題4.72 ストリームの最初の要素が無限ストリームの場合、2番目のストリームの要素がいつまでたっても呼び出されなくなる。 問題4.73 これは、問題4.71 と同様の理由か? ;; 元の評価機の flatten-stream 手続き (define (flatten-stream stream) (if (stream-null? stream) the-empty-stream (interl…続きを読む