Debugging 如何从公共Lisp REPL提示符检查已定义函数的列表
我正在评估/测试一个基于浏览器的应用程序,该应用程序可能是用CommonLisp编写的。除了基于浏览器的界面外,软件还提供了一个带有“CL User>”REPL提示符的“Listener”窗口 我希望检查REPL提示符中的函数、符号和包列表。因此,我可以将前端功能与通过REPL公开的内容联系起来 谷歌搜索对我来说是徒劳的,因为它提供了一步步教授lisp的教程和资源 任何关于通过REPL检查状态的提示和指针都将不胜感激Debugging 如何从公共Lisp REPL提示符检查已定义函数的列表,debugging,lisp,common-lisp,Debugging,Lisp,Common Lisp,我正在评估/测试一个基于浏览器的应用程序,该应用程序可能是用CommonLisp编写的。除了基于浏览器的界面外,软件还提供了一个带有“CL User>”REPL提示符的“Listener”窗口 我希望检查REPL提示符中的函数、符号和包列表。因此,我可以将前端功能与通过REPL公开的内容联系起来 谷歌搜索对我来说是徒劳的,因为它提供了一步步教授lisp的教程和资源 任何关于通过REPL检查状态的提示和指针都将不胜感激 (let ((lst ()))
(let ((lst ()))
(do-all-symbols (s lst)
(when (fboundp s) (push s lst)))
lst)
几乎与原样一样。列出所有包(duh):
要查找从特定包导出的函数,请执行以下操作:
(loop for x being the external-symbol of "CL" when (fboundp x) collect x)
如果您不知道要查找哪些符号,但知道要搜索哪些软件包,则只需列出这些特定软件包中的符号即可大幅减少搜索量:
(defun get-all-symbols (&optional package)
(let ((lst ())
(package (find-package package)))
(do-all-symbols (s lst)
(when (fboundp s)
(if package
(when (eql (symbol-package s) package)
(push s lst))
(push s lst))))
lst))
(get-all-symbols 'sb-thread) ; returns all the symbols in the SB-THREAD package
行(获取所有符号的sb线程)
就是这样做的
如果你知道你在寻找什么类型的符号,并且想猜测它们的名字,你可以这样做
(apropos-list "mapc-") ; returns (SB-KERNEL:MAPC-MEMBER-TYPE-MEMBERS SB-PROFILE::MAPC-ON-NAMED-FUNS)
(apropos-list "map" 'cl) ; returns (MAP MAP-INTO MAPC MAPCAN MAPCAR MAPCON MAPHASH MAPL MAPLIST)
(apropos list)
返回其名称包含您传入的字符串的所有符号,并使用可选包进行搜索
为了弄清楚所有这些符号的作用,那么,试试这个:列出所有符号:
(apropos "")
要列出特定包中的所有内容,请添加“项目名称”:
(apropos "" 'quickproject)
也许是这样的:
(defun get-symbols-in-package (&optional (package *package*))
(let ((lst ()))
(do-symbols (s package)
(push s lst))
lst))
将医生的医嘱用作
(获取包装中的符号)
或(获取包装中的符号'foo)
…Aha(apropos list)。也谢谢你的链接。简单易懂的一行“程序性破坏”。谢谢。在这里发布之前,我确实登陆了你通过谷歌搜索推荐的页面。但我自己却没能弄清楚上面的问题。谢谢你的代码。
(defun get-symbols-in-package (&optional (package *package*))
(let ((lst ()))
(do-symbols (s package)
(push s lst))
lst))