実際にLispで書くなら、それほど時間はかからないはずです。Lisp で簡単なデータベース エンジンを約 1 日の午後で作成しました。これがどのように見えるかの例です:
(select movies (<= 1990 year 2000) (member director '(terry-gilliam tim-burton)))
ここで、'select' はマクロです。それに続く述語をスキャンして、フィールド名であるシンボルを探し、それらをデータベース内のフィールドにバインドします。次に、これらのフィールドを関数に渡されたレコードの値にバインドする関数を記述し、その関数を使用してテーブルをフィルター処理します。マクロは次のように展開されます。
(flet ((filter (item)
(let ((year (movie-year item))
(director (movie-director item)))
(and (<= 1990 year 2000)
(member director '(terry-gilliam tim-burton))))))
(loop for item in movies
if (filter item) collect item))
このように (Lisp のような構文を使用するのではなく、実際には Lisp で) 行うことの優れた点は、無料でコンパイルできることです。私のシステムでは、上記のコードはデータベース エンジンによって解釈されず、実際にはプログラムのコンパイルされた部分です (C ではそれができませんが、できるようになりましたか?)。その結果、データベース コード自体 ('select' とテーブル定義のコード) の長さは数行しかありませんが、高速です。データベースは完全にメモリ常駐ですが、問題ではありません...外部データベースに対応するようにマクロを変更し、インデックスを使用するように記述することもできます。私が取り組んでいたプロジェクトにはそれで十分だったので、インデックスや凝ったものは追加しませんでした。
それについての私のお気に入りの部分は、SQL のすべての簡潔さを保ちながら、すべてが Lisp であるため、コードはその周りのコードと変わらないということです。変数を引用することを心配することなく、変数を検索語に導入できます。