5

Common Lisp には関数と変数に対して異なるバインディング環境があることは承知していますが、タグボディ ラベルに対して別のバインディング環境もあると思います。これよりも多くのバインド環境がありますか? もしそうなら、Common Lisp を Lisp-2 として分類するのは公平でしょうか?

これらの質問は衒学や自転車脱走を意図したものではありません。Common Lisp をよりよく理解したいだけであり、うまくいけば、その仕様をどこで深く掘り下げるかについての指針を得たいと思っています。

4

4 に答える 4

9

Common Lisp には関数と変数のバインディング環境が異なることは承知していますが、

HyperSpecによると、それはnamespacesになります。

名前空間 n. 1. その意味が特定の種類に制限されているバインディング。The bindings of names to tags is the tag namespace.'' 2. any mapping whose domain is a set of names.パッケージは名前空間を定義します。」

(ポイント1.)

しかし、tagbody ラベル用の別のバインド環境もあると思います。これよりも多くのバインド環境がありますか?

はい、さらに名前空間があります。それらのほとんどを公開している小さなスニペットさえ覚えていますが、残念ながら、もう見つけることができません¹。少なくともvariablefunctiontag、およびblock名前空間を公開しましたが、宣言も含まれていた可能性があります。これらの名前空間をリストする別の SO 回答もあります。

もしそうなら、Common Lisp を Lisp-2 として分類するのは公平でしょうか?

上記のリンクされた回答へのコメントで、Rainer Joswig は「一般的な議論は Lisp-n に対する Lisp-1 に関するものである」ことに同意します。

"2" は、値スロットと関数スロットの違いが相対的に重要であること、または他の名前空間のオブジェクトがファースト クラス オブジェクトではないことが原因である可能性があります。たとえば、他の回答で参照されているガブリエル/ピットマンの論文では:

ここで説明した 2 つだけでなく、実際には多数の名前空間があります。前述したように、他の名前空間には少なくともブロックとタグの名前空間が含まれます。型名と宣言名は、多くの場合、名前空間と見なされます。したがって、私たちが使用してきた Lisp1 と Lisp2 という名前は誤解を招くものです。Lisp5 と Lisp6 という名前の方が適切かもしれません。

と:

このホワイト ペーパーでは、"値の名前空間" と "関数の名前空間" と呼ぶ 2 つの名前空間について説明します。他の名前空間には、タグ名 (TAGBODY と GO で使用) とブロック名 (BLOCK と RETURN-FROM で使用) が含まれますが、それらのバインディングのロケーション部分にあるオブジェクトは第一級の Lisp オブジェクトではありません。


¹) PAIP、p。837:

(defun f (f)
  (block f
    (tagbody
     f (catch 'f
         (if (typep f 'f)
             (throw 'f (go f)))
         (funcall #'f (get (symbol-value 'f) 'f))))))
于 2012-08-09T06:05:21.473 に答える
3

PAIP で、Peter Norvig は「Common Lisp には少なくとも 7 つの名前空間がある」と述べています (p. 836)。

彼がリストした7つは次のとおりです。

  1. 関数とマクロ
  2. 変数
  3. 特殊変数
  4. データ型
  5. tagbody 内の go ステートメントのラベル
  6. ブロック内の return-from ステートメントのブロック名
  7. 引用式内の記号

Peter Seibel は、comp.lang.lisp の投稿で、"コンパイラ" と "ライブラリ" の名前空間について素晴らしい指摘をしています。Norvig の 7 つの名前空間はすべて「コンパイラ」の名前空間だと思います。

于 2012-10-04T17:35:23.903 に答える
2

たとえば、comp.lang.lisp からのこの古いディスカッション投稿を参照してください。

http://coding.derkeiler.com/Archive/Lisp/comp.lang.lisp/2004-04/0737.html

于 2012-08-09T11:09:56.690 に答える