問題4.59 – SICP(計算機プログラムの構造と解釈)その232
問題4.59 以下の表明をデータベースに追加する。 (assert! (meeting accounting (Monday 9am))) (assert! (meeting administration (Monday 10am))) (assert! (meeting computer (Wednesday 3pm))) (assert! (meeting administration (Fr…続きを読む
問題4.59 以下の表明をデータベースに追加する。 (assert! (meeting accounting (Monday 9am))) (assert! (meeting administration (Monday 10am))) (assert! (meeting computer (Wednesday 3pm))) (assert! (meeting administration (Fr…続きを読む
問題4.58 次の規則を定義する。 ある人の部門と、 ある人の supervisor の部門が異なる場合。 ある人は、その部門の big shot (黒幕)である。 (assert! (rule (same ?x ?x))) (assert! (rule (big-shot ?person) (and (job ?person (?section . ?type)) (supervisor ?pe…続きを読む
問題4.57 問題文が非常に解りにくい… "person-1 が person-2 と同じ担当である" というのはすぐ理解できるが、その次の条件がよく解らない。 (assert! (rule (same ?x ?x))) (assert! (rule (replace ?person-1 ?person-2) (and (or (and (job ?person-1…続きを読む
問題4.56 a. Ben Bitdiddle が監督している人すべての名前と住所 (and (supervisor ?x (Bitdiddle Ben)) (address ?x ?y)) 実行結果 ;;; Query input: (and (supervisor ?x (Bitdiddle Ben)) (address ?x ?y)) ;;; Query results: (and (sup…続きを読む
問題4.55 a. Ben Bitdiddle に監督されている人すべて (supervisor ?x (Bitdiddle Ben)) 実行結果 ;;; Query input: (supervisor ?x (Bitdiddle Ben)) ;;; Query results: (supervisor (Tweakit Lem E) (Bitdiddle Ben)) (supervisor (…続きを読む
プログラムが実際に動かないとつまらないので、今回も先に評価器を実装する。 "4.4.4 質問システムの実装" からの手続き群を丸写しする。 stream.scm、put、get の各手続きは3章で利用したものを使う。(p159) stream-append は 3.5.3節のものを、tagged-list? 、prompt-for-input は4.1節の超循環評価器のものを利…続きを読む
問題4.54 pred-value が false の場合に失敗継続を呼び出す。 (define (analyze exp) (cond ((self-evaluating? exp) (analyze-self-evaluating exp)) ;; 省略 ((require? exp) (analyze-require exp)) ;; 省略 (else (error "Unknow…続きを読む
CSV ファイルのレコードに重複するカラムがある場合に、そのレコードを削除する Gauche スクリプト。 以下のコードでは *check-column-index* を定義して2番目のカラムでの重複をチェックしている。 (use text.csv) (use gauche.collection) (use srfi-13) (define *check-column-index* 1) (def…続きを読む
Gauche でクイックソートを利用して CSV 形式のデータをソートする。 クイックソートについては、"M.Hiroi’s Home Page / お気楽 Scheme プログラミング入門" を参考にした。 この例では、CSV ファイルの読み込みは省略して、リスト化されたダミーデータを定義して使っている。 CSV ファイルの読み込みについては、"Gauc…続きを読む
make-csv-reader で、入力ポートを引数とする手続きを作る。 この手続きはポートからレコードを1つ読み込み、フィールドのリストを返す。 port->list を使って、返されたフィールドのリストをリストに追加していく。 (use text.csv) (define (read-csv file) (let ((reader (make-csv-reader #\,))) (cal…続きを読む