fog*_*gus 5 lisp namespaces common-lisp lisp-2
我知道Common Lisp对函数和变量有不同的绑定环境,但我相信它还有另一个绑定环境用于标签体标签.是否有比这更具约束力的环境?如果是这样,那么将Common Lisp归类为Lisp-2是否公平?
这些问题并不意味着迂腐或自行车脱落,我只想更好地了解Common Lisp,并希望能够深入了解哪里可以深入挖掘其规格.
我知道Common Lisp对函数和变量有不同的绑定环境,
根据HyperSpec,这将是名称空间:
命名空间 1.表示限于特定种类的绑定.
The bindings of names to tags is the tag namespace.'' 2. any mapping whose domain is a set of names.
包定义了命名空间.''
(第1点)
但我相信它还有标签体标签的另一个绑定环境.是否有比这更具约束力的环境?
是的,有更多的命名空间.我甚至记得有一些小片暴露了他们中的大部分,但不幸的是,我再也找不到了¹.它至少暴露了变量,函数,标记和块命名空间,但也可能包含类型和声明.还有另一个SO答案列出了这些名称空间.
如果是这样,那么将Common Lisp归类为Lisp-2是否公平?
在对上述相关答案的评论中,Rainer Joswig同意"一般性辩论是关于Lisp-1反对Lisp-n".
"2"可能是由于值和函数槽之间的区别的相对重要性,或者因为其他命名空间的对象不是第一类对象.例如,在另一个答案中引用的Gabriel/Pitman论文中:
实际上有更多的命名空间,而不仅仅是这里讨论的两个.正如我们前面提到的,其他命名空间至少包括块和标记的命名空间; 类型名称和声明名称通常被视为名称空间.因此,我们一直使用的名称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))))))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
774 次 |
最近记录: |