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

Bal*_*nan 15 lisp debugging common-lisp

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

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

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

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

wil*_*urd 9

如果您不知道要查找的符号,但确实知道要搜索的包,则只需列出这些特定包中的符号,即可大幅减少必须执行的搜索量:

(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
Run Code Online (Sandbox Code Playgroud)

这条线(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)
Run Code Online (Sandbox Code Playgroud)

(apropos-list) 返回名称中包含您传入的字符串的所有符号,并使用可选包进行搜索.

至于找出所有这些符号的作用,那么试试这个:http://www.psg.com/~dlamkins/sl/chapter10.html


tjb*_*tjb 8

列出所有内容:

 (apropos "")
Run Code Online (Sandbox Code Playgroud)

要列出特定包中的所有内容,请添加'project-name:

(apropos "" 'quickproject)
Run Code Online (Sandbox Code Playgroud)


hua*_*uan 7

列出所有包(duh):

(list-all-packages)
Run Code Online (Sandbox Code Playgroud)

要查找从特定包导出的函数:

(loop for x being the external-symbol of "CL" when (fboundp x) collect x)
Run Code Online (Sandbox Code Playgroud)