4.4 論理型プログラミング、4.4.1 推論的情報検索 – SICP(計算機プログラムの構造と解釈)その227

プログラムが実際に動かないとつまらないので、今回も先に評価器を実装する。 "4.4.4 質問システムの実装" からの手続き群を丸写しする。 stream.scm、put、get の各手続きは3章で利用したものを使う。(p159) stream-append は 3.5.3節のものを、tagged-list? 、prompt-for-input は4.1節の超循環評価器のものを利…続きを読む

Gauche で CSV 形式のデータをソートする

Gauche でクイックソートを利用して CSV 形式のデータをソートする。 クイックソートについては、"M.Hiroi’s Home Page / お気楽 Scheme プログラミング入門" を参考にした。 この例では、CSV ファイルの読み込みは省略して、リスト化されたダミーデータを定義して使っている。 CSV ファイルの読み込みについては、"Gauc…続きを読む

Gauche で CSV 形式のデータを読み込む

make-csv-reader で、入力ポートを引数とする手続きを作る。 この手続きはポートからレコードを1つ読み込み、フィールドのリストを返す。 port->list を使って、返されたフィールドのリストをリストに追加していく。 (use text.csv) (define (read-csv file) (let ((reader (make-csv-reader #\,))) (cal…続きを読む

問題4.53 – SICP(計算機プログラムの構造と解釈)その225

問題4.53 (amb) があるために、if-fail の第1引数はバックトラックを繰り返して prime-sum-pair により全ての組み合わせを探索する。 また、permanent-set! で pairs にセットした値はバックトラックしても元の値に戻されないため、成功した組み合わせは pairs に追加されていく。 全ての組み合わせを探索し、選択を使い切った時、if-fail の第1引数…続きを読む