我正在评估/测试基于浏览器的应用程序,可能是用普通的lisp编写的。除了基于浏览器的界面外,该软件还提供了一个“监听器”窗口,其中包含“CL-User>” REPL提示。
我希望从REPL提示中检查函数,符号和包的列表。这样我就可以将前端功能与通过REPL公开的内容联系起来。
Google搜索对我来说是徒劳的,因为它会导致教程和资源逐步教授lisp。
任何提示,通过REPL检查状态的指示将非常感激。
答案 0 :(得分:9)
如果您不知道要查找的符号,但确实知道要搜索的包,则只需列出这些特定包中的符号,即可大幅减少必须执行的搜索量: / p>
(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
行(get-all-symbols 'sb-thread)
就是这样做的。
如果您对要查找的符号类型有所了解,并想对其名称进行猜测,则可以执行此操作
(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)
返回名称中包含您传入的字符串的所有符号,并使用可选包进行搜索。
至于弄清楚所有这些符号的作用,那么试试这个:http://www.psg.com/~dlamkins/sl/chapter10.html
答案 1 :(得分:6)
列出所有包裹(duh):
(list-all-packages)
查找从特定包导出的函数:
(loop for x being the external-symbol of "CL" when (fboundp x) collect x)
答案 2 :(得分:6)
列出所有内容:
(apropos "")
要列出特定包中的所有内容,请添加'project-name:
(apropos "" 'quickproject)
答案 3 :(得分:4)
(let ((lst ()))
(do-all-symbols (s lst)
(when (fboundp s) (push s lst)))
lst)
从here开始按原样拍摄。