問題4.76 – SICP(計算機プログラムの構造と解釈)その247
問題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.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…続きを読む
Ubuntu 8.04 (Hardy Heron) でゴミ箱の実体ディレクトリの場所を探した。 Nautilus の "場所:" では trash:/// としか表示されず、実際の場所がわからない。 調べてみたら、 ~/.local/share/Trash/files/ が実際のディレクトリだった。 ついでに、調べ方のメモを残しておく。 適当なファイル名(hogehogefug…続きを読む
問題4.71 ;;;; 評価機での simple-query 手続き (define (simple-query query-pattern frame-stream) (stream-flatmap (lambda (frame) (stream-append-delayed (find-assertions query-pattern frame) (delay (apply-rules qu…続きを読む
問題4.70 cons-stream により作られるストリームの cdr は遅延評価されるため THE-ASSERTIONS は初期値として与えられた assertion の無限ストリームとなる。 let により一時退避させることにより無限ストリーム化を防いでいる。 ;; 元の評価機の add-assertion! 手続き (define (add-assertion! assertion) (s…続きを読む
問題4.69 問題4.63 のデータベースと各規則の子と孫の関係を利用する。 (assert! (rule ((great . ?rel) ?x ?y) (and (son-of ?x ?w) (?rel ?w ?y)))) (assert! (rule ((grandson) ?x ?y) (grandson-of ?x ?y))) 実行結果 ;;; Query input: ((great g…続きを読む
問題4.68 (assert! (rule (append-to-form () ?y ?y))) (assert! (rule (append-to-form (?u . ?v) ?y (?u . ?z)) (append-to-form ?v ?y ?z))) (assert! (rule (reverse () ()))) (assert! (rule (reverse (?car . ?c…続きを読む
コレクションを操作する際に、各要素に変換を行った要素に基づいて操作を行うが、欲しい結果は変換を行った要素のコレクションではなく元の要素のコレクションである場合に利用する。 文字列の配列を大文字・小文字を無視してソートする場合を考える。 # 文字列の配列 ary = ["foo", "Bar", "baz", "HOGE"…続きを読む