首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Common Lisp a Lisp-n?

Common Lisp a Lisp-n?
EN

Stack Overflow用户
提问于 2012-08-09 12:27:49
回答 4查看 903关注 0票数 5

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

这些问题并不是学究或自行车脱落的意思,我只是想更好地理解Common Lisp,并希望能得到一些关于深入研究它的规范的指针。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-08-09 14:05:21

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

根据HyperSpec,这将是名称空间

名称空间n.1.其表示被限制为特定类型的绑定。The bindings of names to tags is the tag namespace.'' 2. any mapping whose domain is a set of names.包定义了一个命名空间。‘’

(第1点)

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

是的,还有更多的命名空间。我甚至记得有一个小片段暴露了大部分内容,但不幸的是,我再也找不到它了。它至少公开了变量、函数、标记和块命名空间,但也可能包括类型和声明。还有列出这些名称空间的another SO answer

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

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

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

除了这里讨论的两个名称空间之外,还有更多的名称空间。如前所述,其他名称空间至少包括块和标记的名称空间;类型名称和声明名称通常被认为是名称空间。因此,我们一直使用的名称Lisp1和Lisp2具有误导性。名称Lisp5和Lisp6可能更合适。

和:

在本文中,有两个值得关注的名称空间,我们将它们称为“值名称空间”和“函数名称空间”。其他名称空间包括标记名(由TAGBODY和GO使用)和块名(由block和RETURN-FROM使用),但它们绑定的位置部分中的对象不是一级Lisp对象。

²) PAIP,第837页:

代码语言:javascript
复制
(defun f (f)
  (block f
    (tagbody
     f (catch 'f
         (if (typep f 'f)
             (throw 'f (go f)))
         (funcall #'f (get (symbol-value 'f) 'f))))))
票数 9
EN

Stack Overflow用户

发布于 2012-10-05 01:35:24

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

他列出的七个是:

  1. functions and macros
  2. variables
  3. special variables
  4. data types
  5. label for go statements return code
  6. a block name for return-from statements a quoted

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

票数 3
EN

Stack Overflow用户

发布于 2012-08-09 19:09:57

例如,请参阅来自comp.lang.lisp的这篇旧讨论帖子:

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11876815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档