Как просмотреть список определенных функций из командной строки Common Lisp REPL - PullRequest
14 голосов
/ 03 октября 2009

Я оцениваю / тестирую приложение на основе браузера, предположительно написанное обычным шрифтом. Помимо интерфейса на основе браузера, программное обеспечение предоставляет окно «Слушатель» с подсказкой «CL-пользователь>» REPL.

Я хочу изучить список функций, символов и пакетов из приглашения REPL. Чтобы я мог связать функциональность внешнего интерфейса с тем, что раскрывается через REPL.

Поиск в Google бесполезен для меня, так как ведет к учебным пособиям и ресурсам, которые обучают пошаговым инструкциям.

Будем очень благодарны за любые подсказки, советы по проверке состояния через REPL.

Ответы [ 5 ]

9 голосов
/ 03 октября 2009

Если вы не знаете, какие символы вы ищете, но знаете, какие пакеты вы хотите найти, вы можете существенно сократить количество запросов, которые вам нужно выполнить, перечислив только символы из этих конкретных пакетов: 1001 *

(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

7 голосов
/ 31 октября 2012

Чтобы перечислить все:

 (apropos "")

Чтобы вывести список из определенного пакета, добавьте 'project-name:

(apropos "" 'quickproject)
6 голосов
/ 03 октября 2009

Чтобы просмотреть все пакеты (дух):

(list-all-packages)

Чтобы найти функции, экспортированные из определенного пакета:

(loop for x being the external-symbol of "CL" when (fboundp x) collect x)
4 голосов
/ 03 октября 2009
(let ((lst ()))                                                     
   (do-all-symbols (s lst)
     (when (fboundp s) (push s lst)))
   lst)

В значительной степени взято как есть от здесь .

0 голосов
/ 12 августа 2017

Может быть, что-то вроде этого:

(defun get-symbols-in-package (&optional (package *package*))
           (let ((lst ()))
             (do-symbols (s package)
               (push s lst))
             lst))

Использовать как (get-symbols-in-package) или (get-symbols-in-package 'foo) ...

...