2010-09-01から1ヶ月間の記事一覧

代入マクロを書くマクロ

Common Lisp では、代入先の「変数」がシンボルであるとは限らないため、一般の代入マクロを書くには get-setf-expansion を使って情報を展開する必要がある。これを毎回やるのは面倒なので、マクロに肩代わりさせよう。 _f は『On Lisp』にあったものに少し…

継続による非決定計算の実装

SICP を読んでいる今日この頃だが、Ruby でも継続が使えると知って、実際にやってみた。処理系は Windows の ActiveScriptRuby 1.8.7。最後に触ったの、いつだっけ……。そもそも今回のプログラムを書くために Ruby の文法を1日かけて復習しなければならなか…

制約関数

Prolog みたいに逆算できる関数というのを作ってみた。 引数のうちクエスチョンマークが置かれた部分の値を求める。すべての引数が数値で与えられたときは真偽を返す述語となる。 コード: (defparameter ? (gensym)) (defun ?-test (exp) (if (consp exp) `…

Common Lisp で遅延評価(part 2/2)

Common Lisp で遅延評価をやってみようという話の続き。1度ミスで消してしまって心が折れかけたよ。 さて、『計算機プログラムの構造と解釈』(SICP)にある、遅延ストリームで冪(べき)級数を扱ったりそれを微積分したりするという問題を解く。以下のコー…

Common Lisp で遅延評価(part 1/2)

『計算機プログラムの構造と解釈』(SICP)を読んでいる。いま Scheme インタプリタ再構築の章。近いうち、Common Lisp の上に実装して遊びたい。 今日の記事は、遅延評価を Common Lisp でやってみた、という話。delay & force も、マクロにかかればイチコ…