我对普通的Lisp很陌生。当主题是包和系统时,甚至更多。我正在处理一个程序,有些东西让我很感兴趣。顺便说一句,我用的是SBCL和Slime (Emacs)。
在顶层(CL-用户),我可以:
CL-USER> (application-name/file-name::%function-on-parenscript)这行得通!然后,我更改为在包内:
CL-USER> (in-package :application-name)好的。因此,我认为在进入应用程序名称之后:
APPLICATION-NAME>我可以做的就是:
APPLICATION-NAME> (file-name::%function-on-parenscript)然而,这是行不通的。如果我这么做就行了:
APPLICATION-NAME> (application-name/file-name::%function-on-parenscript)如果我在application-name里面,为什么application-name是必要的?
2-为什么有时我需要使用::,而另一些时候我只使用:来调用事物?
常见的Lisp包用于解决名称空间问题。但它们真的吸引了我。
发布于 2021-06-18 21:14:37
application-name/file-name和application-name是两个不同的包,它们仅在名称上类似于人类读者,但在其他方面是不相关的。
符号要么用包前缀写,要么不带。当有包前缀时,包是冒号左边或双冒号的部分。
双冒号是一种引用不是从包导出的符号(它们是私有的)的方法。
单个冒号用于导出的符号。
如果要引用的符号在当前包中是“可访问的”,例如,因为您正在“使用”它的包并导出它,那么您可以编写没有包前缀的符号
详细信息请参见大型程序设计:包和符号
https://stackoverflow.com/questions/68040182
复制相似问题