LISPUSER

LISPMEMOLisp is like a ball of mud - you can throw anything you want into it, and it's still Lisp. -- Anonymous

(top)  (memo)  (rss)

Emacs Lisp と Common Lisp

Emacs Lisp は (Scheme よりは) Common Lisp に近い、ということかと思います。 以下理由:

  1. 真偽: T, NIL で Scheme 族ではない
  2. 基本が反復。Schemer が使うとほぼ間違いなく再帰が深過ぎというエラーがでる
  3. Lisp-2 : 変数と関数の名前空間が別 (let ((car '(item))) (car car)) => item
  4. ダイナミックスコープ (CLはレキシカルスコープとダイナミックスコープ、Schemeは基本レキシカルのみ)
  5. マクロが伝統的な defmacro
  6. 破壊的操作を恐れない (むしろ推奨)。命名規則も nrevse とか。
  7. 伝統的に関数型っぽく書く事を重視しない

Common Lisp の人にとっては「最適化がちょっと弱くて、全部ダイナミックスコープな処理系」だと言われれば あまり問題はないですが、Schemeしか知らない場合には最初はちょっと辛いでしょう。

典型的な Common Lisper の対応:

  1. 当然。
  2. そーゆうもんだと思えば全然許容範囲内。
  3. 当然。
  4. 不便だけど、まぁしょうがないから気をつけよう。
  5. 当然。
  6. 当然。
  7. 当然。

一方、Scheme の人だと:

  1. なにそれ…
  2. ありえん。どうやってプログラム書くの?
  3. 混乱するし funcall は面倒!
  4. ありえん。
  5. 危険すぎる!
  6. ありえん。命名規則も違う。 reverse! がなんで nreverse なの?
  7. ありえん。

かなり誇張気味ですがこんな風に感じるのではないかと。

Emacs には標準で cl という Common Lisp との互換性をもったライブラリが添付されています。 これを使えば、それなりに Common Lisp っぽく使うことができますが、 一方で Scheme らしく使うのは非常に困難です。

まぁ、Scheme の人でも結局 Emacs は使うので、最初の印象だけだと思います。

さらに「遠い」Lisp族たち:

すごく「遠い」Lisp族:

  • Age of Empire II のルール記述言語 - ルール記述に特化。中置記法 S 式
  • LFE - Lisp Flavoured Erlang : Eralng VM 上の Lisp (LFE紹介のプレゼン資料 )
  • Qi - Common Lisp 上に構築された Lisp オプショナルな静的型チェックを備える (http://www.lambdassociates.org/ )

個人的な感覚によるとこんな分類です。

posted: 2008/08/15 00:03 | permanent link to this entry | Tags: LISP

(top)  (memo)  (rss)