Lisp

マクロの変数捕捉

説明用のシンプルな例を思いついたのでメモ。例えばmy-orを次のように定義したとする。 (define-macro (my-or test1 test2) `(let ((x ,test1)) (if x x ,test2)))しかしこれでは、以下の場合に正しい結果を返さない。 gosh> x #t gosh> (or #f x) #t gosh> …

QiII

Haskellの型推論が邪魔だった俺にはこれいいかも。 2. Lisp じゃなくて Qi で書く事の利点は何? * Qi II は CAR / CDR を強制しない。かわりに、パターンマッチを使う事ができる。典型的な Qi プログラムは Lisp プログラムと比較して非空白文字が40%程度に…

リーダーマクロ

CommonLispはmake-dispatch-macro-characterとかset-dispatch-macro-characterを使って定義するようだ。 Gaucheにはこういう機能はないのかな? 最近さわっている Ruby のブロックを参考に,Common Lisp のリーダーマクロを使って (mapcar (lambda (x) (* x …

Arc

* Lisp-1 * 代入オペレータは= o 変数が無かったら作る o carやcdrの戻り値にも適用できる o 下記のコレクションのインデックスアクセスの戻り値にも適用できる * 関数定義はdef * 匿名関数はfn * 文字列やハッシュテーブルのような構造のあるオブジェクトは…

Lisp-1とLisp-2

今までScheme系とCommonLisp系って勝手に呼んでたけど、こういう用語があったのか。 最近、「CommonLispはLisp-2で、SchemeはLisp-1である」という文章を読んだ 名前空間がひとつ(関数と変数に区別がない)のがLisp-1で、 区別があるのがLisp-2であるというこ…