2009-10-02 9 views
14

Oceniam/testuję aplikację opartą na przeglądarce, która prawdopodobnie została napisana w typowym seplenie. Oprócz interfejsu opartego na przeglądarce, oprogramowanie udostępnia okno "Odbiornik" z komunikatem REPL "CL-User>".Jak sprawdzić listę zdefiniowanych funkcji z podpowiedzi Common Lisp REPL

Chciałbym przejrzeć listę funkcji, symboli i paczek od zgłoszenia REPL. Tak, żebym mógł kojarzyć funkcjonalność frontendu z tym, co jest wyeksponowane przez REPL.

Wyszukiwarka Google jest dla mnie daremna, ponieważ prowadzi do samouczków i zasobów, które uczą seplenienia krok po kroku.

Wszelkie wskazówki, wskazówki dotyczące badania stanu za pośrednictwem REPL będą mile widziane.

Odpowiedz

8

Jeśli nie wiesz, co symbole szukasz, ale nie wiesz, jakie pakiety chcesz przeszukać, możesz znacznie zmniejszyć ilość wyszukiwań, które musisz wykonać, wyświetlając tylko symbole z tych konkretnych pakietów:

(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

Właśnie to robi linia (get-all-symbols 'sb-thread).

Jeśli masz pomysł na temat, jaki rodzaj symboli szukasz i chcesz zgadywać co ich nazwy, można to zrobić

(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) zwraca wszystkie symbole, których nazwa zawiera ciąg przekazujesz i bierze opcjonalny pakiet do wyszukiwania.

Jeśli chodzi o zastanawianie się, co te wszystkie symbole zrobić dobrze, spróbuj tego: http://www.psg.com/~dlamkins/sl/chapter10.html

+0

Aha (apropos-list), co zamówił lekarz. Dziękuję również za link. –

4
(let ((lst()))              
    (do-all-symbols (s lst) 
    (when (fboundp s) (push s lst))) 
    lst) 

Prawie podjęte jako jest od here.

+0

zrobiłem grunty na strony, sugerowanej przez google przed wysłaniem tutaj. Ale nie byłem w stanie samodzielnie tego zrozumieć. Dzięki za krystalicznie czysty kod. –

6

Do listy wszystkich pakietów (duh):

(list-all-packages) 

Aby znaleźć funkcje eksportowane z danego pakietu:

(loop for x being the external-symbol of "CL" when (fboundp x) collect x) 
+0

Łatwo zrozumieć jedną wkładkę dla "proceduralnie rozpieszczonej". Dzięki. –

6

Do listy wszystko:

(apropos "") 

Do listy wszystko z pakietu konkretnego dodatku „projekt-name:

(apropos "" 'quickproject) 
0

Może coś takiego:

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

Zastosowanie jako (get-symbols-in-package) lub (get-symbols-in-package 'foo) ...