How to examine list of defined functions from Common Lisp REPL prompt

后端 未结 5 1772
一向
一向 2021-01-04 03:02

I\'m evaluating/testing a browser based application presumably written in common lisp. Apart from the browser based interface, the software provides a \'Listener\' window wi

5条回答
  •  梦毁少年i
    2021-01-04 03:42

    If you don't know what symbols you're looking for, but do know what packages you want to search, you can drastically reduce the amount of searching you have to do by only listing the symbols from those specific packages:

    (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

    The line (get-all-symbols 'sb-thread) does just that.

    If you have an idea about what type of symbols you're looking for, and want to take a guess at their names, you can do this

    (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) returns all symbols whose name contains the string you pass in, and takes an optional package to search.

    As far as figuring out what all those symbols do, well, try this: http://www.psg.com/~dlamkins/sl/chapter10.html

提交回复
热议问题