Lisp 有没有办法找出表格来自哪个文件?

Lisp 有没有办法找出表格来自哪个文件?,lisp,common-lisp,Lisp,Common Lisp,假设我在一个名为example.lisp的文件中有以下内容 (in-package :example) (defparameter *global* 'bar) (defun foo (a b) (list a b)) 有这样的功能吗 > (hypothetical-function #'foo) #P"example.lisp" > (hypothetical-function '*global*) #P"example.lisp" 我特别寻找的是函数或宏,而不是SLIM

假设我在一个名为
example.lisp
的文件中有以下内容

(in-package :example)

(defparameter *global* 'bar)

(defun foo (a b) (list a b))
有这样的功能吗

> (hypothetical-function #'foo)
#P"example.lisp"

> (hypothetical-function '*global*)
#P"example.lisp"

我特别寻找的是函数或宏,而不是SLIME命令或类似命令。为了在生成的文件中生成某些文档,程序的位需要知道其他位的来源,这似乎是我不需要手动传入原始文件就可以做到的事情。

据我所知,此功能不是标准的一部分,但具体的实现可能会提供它

例如,在(另请参见
ccl:*记录源文件*
)中:

欢迎使用Clozure通用Lisp版本1.8-dev-r14962-trunk(WindowsX8632)!
? (加载“~/foo/foo.lisp”)
#P“C:/Users/dhl/foo/foo.lisp”
? (ccl:查找定义源'*foo*)
((#.*FOO*)#)
? (ccl:源注释文件名(cadar(ccl:查找定义源'*foo*))
“home:foo;foo.lisp.newst”
? (ccl:源注释文件名(ccl:函数源注释#'foo))
“home:foo;foo.lisp.newst”
(这使用。)


因此,您必须阅读实现的文档,或者检查是否有类似于查找源代码库的内容。

有关独立于实现的方法,请查看
swank::find source location

,我必须进一步检查文档,但似乎还有一个
sb内省:查找定义源
,它可能在SBCL中起到类似的作用。谢谢嗯,是的;有
swank backend::find source location
swank:find definition for thing
,两者似乎返回相同的结果。
Welcome to Clozure Common Lisp Version 1.8-dev-r14962-trunk  (WindowsX8632)!
? (load "~/foo/foo.lisp")
#P"C:/Users/dhl/foo/foo.lisp"
? (ccl:find-definition-sources '*foo*)
(((#<VARIABLE-DEFINITION-TYPE VARIABLE #xC157526> . *FOO*) #<SOURCE-NOTE "home:f
oo;foo.lisp":0-22 "(defparameter *foo* 1)">))
? (ccl:source-note-filename (cadar (ccl:find-definition-sources '*foo*)))
"home:foo;foo.lisp.newest"
? (ccl:source-note-filename (ccl:function-source-note #'foo))
"home:foo;foo.lisp.newest"