repl documentation lisp common-lisp read-eval-print-loop

documentation - ¿Cómo ver las cadenas de documentación y otra información de símbolos en Common Lisp REPL?



repl ruby (2)

Soy completamente nuevo en CL, y me gustaría aprender a leer cadenas de documentación y obtener otra información de ayuda del REPL. ¿Algo como help(symbol) en Python, o symbol? en iPython, o :t y :i en Haskell''s GHCi.

Entonces, dado un nombre de símbolo, me gustaría poder saber:

  • a qué tipo de valor está vinculado, si lo hay (una función, una variable, ninguna en absoluto)
  • Si es una función o una macro, ¿cuáles son sus argumentos posicionales?
  • si tiene una cadena de documentación, muéstrala
  • de qué paquete o archivo proviene o cuándo se definió

Encontré que hay (documentation ''_symbol_ ''_type_) , pero no es exactamente lo que necesito. Necesito saber el tipo de valor al que está vinculado el símbolo ( ''function , ''variable , ''compiler-macro , etc.) antes de poder usar la documentation . Luego devuelve solo la cadena de documentación, puede que falte o no sea suficiente para usar el símbolo.

Por ejemplo, en Lisp, la ayuda para mapcar no es muy útil (REPL de CLisp):

> (documentation ''mapcar ''function) NIL

Me gustaría poder ver algo como esto en su lugar:

>>> map? Type: builtin_function_or_method Base Class: <type ''builtin_function_or_method''> String Form: <built-in function map> Namespace: Python builtin Docstring: map(function, sequence[, sequence, ...]) -> list Return a list of the results of applying the function to the items of the argument sequence(s). If more than one sequence is given, the function is called with an argument list consisting of the corresponding item of each sequence, substituting None for missing values when not all sequences have the same length. If the function is None, return a list of the items of the sequence (or a list of tuples if more than one sequence).


Como se mencionó, Common Lisp tiene funciones estándar: DESCRIBE , INSPECT y DOCUMENTATION . Las IDE típicas de Lisp también tienen estas teclas y menús.

Para la funcionalidad estándar de Common Lisp, la mayoría de los IDE se vinculan directamente a la documentación de Common Lisp HyperSpec con una pulsación de tecla.

La mayoría de los IDE también tienen pulsaciones de teclas para mostrar el arglista y la documentación. También existe la funcionalidad ''arglista en el espacio''.

Ejemplos específicos de LispWorks: información de la lista de argumentos de LispWorks y menú de expresiones de LispWorks

Puedo recomendar leer el manual de IDE para Slime , LispWorks Editor , ELegro CL''s ELI o cualquier IDE que esté utilizando.


Con respecto a su pregunta acerca de cómo obtener el tipo de símbolo: no existe tal cosa. O, más precisamente, los símbolos no son solo nombres de otros objetos, sino objetos del tipo SYMBOL . Cada símbolo puede tener tanto un valor variable como un valor de función. Para verificar si tiene un valor variable, use BOUNDP , y para verificar un valor de función FBOUNDP .