【问题标题】:Common Lisp a Lisp-n?Common Lisp 一个 Lisp-n?
【发布时间】:2012-08-06 06:56:04
【问题描述】:

我知道 Common Lisp 对函数和变量有不同的绑定环境,但我相信它还有另一个用于标签体标签的绑定环境。还有比这更多的绑定环境吗?如果是这样,那么将 Common Lisp 归类为 Lisp-2 是否公平?

这些问题并不意味着迂腐或骑自行车,我只是想更好地了解 Common Lisp,并希望能获得一些指针,了解在哪里更深入地研究它的规范。

【问题讨论】:

    标签: namespaces lisp common-lisp lisp-2


    【解决方案1】:

    在 PAIP 中,Peter Norvig 说“Common Lisp 至少有七个名称空间”(第 836 页)。

    他列出的七个是:

    1. 函数和宏
    2. 变量
    3. 特殊变量
    4. 数据类型
    5. 标签正文中的 go 语句标签
    6. 块内返回语句的块名
    7. 引用表达式中的符号

    Peter Seibel 在他关于“编译器”与“库”命名空间的 comp.lang.lisp 帖子中提出了一个很好的观点。我认为 Norvig 的所有七个命名空间都是“编译器”命名空间。

    【讨论】:

      【解决方案2】:

      我知道 Common Lisp 有不同的绑定环境 函数和变量,

      根据HyperSpec,这将是命名空间

      命名空间 n. 1. 外延仅限于 a 的绑定 特别的种类。 The bindings of names to tags is the tag namespace.'' 2. any mapping whose domain is a set of names.A 包定义了一个命名空间。''

      (第 1 点。)

      但我相信它还有另一个用于 tagbody 的绑定环境 标签。还有比这更多的绑定环境吗?

      是的,还有更多的命名空间。我什至记得有一点 sn-p 暴露了它们中的大多数,但不幸的是,我再也找不到它了¹。它至少暴露了 variablefunctiontagblock 命名空间,但也可能暴露了 types 和 声明 被包括在内。还有another SO answer 列出了这些命名空间。

      如果是这样,那么将 Common Lisp 归类为 Lisp-2 是否公平?

      在上述链接答案的 cmets 中,Rainer Joswig 同意“关于 Lisp-1 与 Lisp-n 的一般性辩论”。

      “2”可能是由于值槽和函数槽之间区别的相对重要性,或者因为其他命名空间的对象不是一流的对象。例如在另一个答案中引用的Gabriel/Pitman paper

      实际上有更多的命名空间,而不仅仅是两个 在这里讨论。如前所述,其他命名空间包括 至少是块和标签的那些;类型名称和声明名称是 通常被认为是命名空间。因此,名称 Lisp1 和 Lisp2,我们 一直在使用具有误导性。 Lisp5 和 Lisp6 的名称可能是 更合适。

      和:

      在本文中,我们关注两个命名空间,我们 应称为“值命名空间”和“函数命名空间”。其他 命名空间包括标签名称(由 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))))))
      

      【讨论】:

        【解决方案3】:

        例如,参见 comp.lang.lisp 的这篇旧讨论帖子:

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

        【讨论】:

          【解决方案4】:

          是 - http://www.lispworks.com/documentation/lw51/CLHS/Body/t_symbol.htm#symbol 指定单独的值单元格和函数单元格,与 lisp-2 一致。

          还有一个属性列表,但由于没有符号“自然”引用其属性列表的上下文,因此通常不将 CL 描述为 lisp-3(事实上,我不知道通常如此指定的任何语言)。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-03-26
            • 1970-01-01
            • 2019-05-10
            • 2020-07-17
            • 1970-01-01
            • 1970-01-01
            • 2020-08-16
            • 1970-01-01
            相关资源
            最近更新 更多