Debugging 如何从公共Lisp REPL提示符检查已定义函数的列表

Debugging 如何从公共Lisp REPL提示符检查已定义函数的列表,debugging,lisp,common-lisp,Debugging,Lisp,Common Lisp,我正在评估/测试一个基于浏览器的应用程序,该应用程序可能是用CommonLisp编写的。除了基于浏览器的界面外,软件还提供了一个带有“CL User>”REPL提示符的“Listener”窗口 我希望检查REPL提示符中的函数、符号和包列表。因此,我可以将前端功能与通过REPL公开的内容联系起来 谷歌搜索对我来说是徒劳的,因为它提供了一步步教授lisp的教程和资源 任何关于通过REPL检查状态的提示和指针都将不胜感激 (let ((lst ()))

我正在评估/测试一个基于浏览器的应用程序,该应用程序可能是用CommonLisp编写的。除了基于浏览器的界面外,软件还提供了一个带有“CL User>”REPL提示符的“Listener”窗口

我希望检查REPL提示符中的函数、符号和包列表。因此,我可以将前端功能与通过REPL公开的内容联系起来

谷歌搜索对我来说是徒劳的,因为它提供了一步步教授lisp的教程和资源

任何关于通过REPL检查状态的提示和指针都将不胜感激

(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))