2009-10-02 8 views
14

Estoy evaluando/probando una aplicación basada en el navegador presumiblemente escrita con un lisp común. Además de la interfaz basada en el navegador, el software proporciona una ventana de "Escucha" con un indicador de "RE-Usuario>" REPL.Cómo examinar la lista de funciones definidas desde el indicador de Common Lisp REPL

Deseo examinar la lista de funciones, símbolos y paquetes del indicador REPL. Para poder correlacionar la funcionalidad frontend con lo que está expuesto a través de REPL.

La búsqueda en Google es inútil para mí, ya que conduce a tutoriales y recursos que enseñan paso a paso lisp.

Cualquier sugerencia, sugerencias para examinar el estado a través de REPL serán muy apreciadas.

Respuesta

8

Si usted no sabe qué símbolos que estás buscando, pero sí sabe qué paquetes desea buscar, puede reducir drásticamente la cantidad de búsquedas que tiene que hacer al solo enumerar los símbolos de esos paquetes específicos:

(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

La línea (get-all-symbols 'sb-thread) hace justamente eso.

Si usted tiene una idea acerca de qué tipo de símbolos que busca y desea tener una pista sobre sus nombres, se puede hacer esto

(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) declaraciones de todos los símbolos cuyo nombre contenga la cadena usted pasa y toma un paquete opcional para buscar.

En cuanto a averiguar lo que todos los símbolos hacen, así, intente esto: http://www.psg.com/~dlamkins/sl/chapter10.html

+0

Aha (apropos-list) lo que ordenó el médico. Gracias por el enlace también. –

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

Bastante tomado como está de here.

+0

que hizo la tierra en la página que sugirió a través de Google de búsqueda antes de publicar aquí. Pero no pude descubrir lo anterior por mi cuenta. Gracias por el código claro como el cristal. –

6

para listar todos los paquetes (la):

(list-all-packages) 

Para encontrar las funciones exportadas de un paquete en particular:

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

Un trazador de líneas fácil de entender para el "estropeado procesal". Gracias. –

6

enumerar todo:

(apropos "") 

lista Para todo, desde un complemento específico de paquete 'nombre-proyecto:

(apropos "" 'quickproject) 
0

Tal vez algo como esto:

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

uso como (get-symbols-in-package) o (get-symbols-in-package 'foo) ...

Cuestiones relacionadas