如何从Common Lisp REPL提示中检查已定义函数的列表

时间:2009-10-02 21:56:38

标签: debugging lisp common-lisp

我正在评估/测试基于浏览器的应用程序,可能是用普通的lisp编写的。除了基于浏览器的界面外,该软件还提供了一个“监听器”窗口,其中包含“CL-User>” REPL提示。

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

Google搜索对我来说是徒劳的,因为它会导致教程和资源逐步教授lisp。

任何提示,通过REPL检查状态的指示将非常感激。

4 个答案:

答案 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开始按原样拍摄。