2011-05-08 18 views
8

¿Sabes dónde puedo obtener la fuente de un predicado en Common Lisp? (El contenido del predicado, si lo prefiere). Por ejemplo, el código fuente de setq, string = etc.Predijo Common Lisp

¡Gracias!

+3

Esto es generalmente una característica del entorno de desarrollo Lisp (como SLIME) que está utilizando. También deberías instalar el código fuente de tu distribución Lisp para poder navegar hasta él. –

Respuesta

4

Los entornos de desarrollo de Common Lisp suelen proporcionar una forma de buscar definiciones en el archivo con el código fuente.

Alternativamente, FUNCTION-LAMBDA-EXPRESSION podría ser capaz de recuperar la fuente de un predicado y otras funciones, si el entorno Lisp se ha configurado para guardar las definiciones.

También puede buscar en los archivos lisp de implementaciones de lisp de código abierto. Por ejemplo, en Clozure CL setq se define en el compilador/nx1.lisp archivo de la distribución. Un consejo es colocar un espacio al frente de la palabra de búsqueda para eludir coincidencias como (setq.

+0

Gracias! No uso SLIME pero lo intentaré. – lilawood

+0

Esto da el código fuente de predicado como setq, string-compare, etc. – lilawood

+0

Comprobé usando el entorno de desarrollo de lisp MCLIDE (el mismo back-end que SLIME) con cuatro implementaciones de Common Lisp diferentes: Clozure CL, SBCL, CLISP y MCL. Ninguno de los dos pudo buscar la definición de 'SETQ' (incluso si Clozure tiene una definición en compiler/nx1.lisp). Solo Clozure y MCL pudieron encontrar la definición de 'STRING ='. Puede tener mejor suerte yendo más allá de las funciones básicas. –

0

SETQ no es un predicado. Ni siquiera es una función, por lo que no podrías encontrarlo a través del IDE. STRING = es un predicado y una función, por lo que funciona mejor.

¿Quieres decir "primitivo?" para "predicado"?

+0

Estoy buscando el origen de la función como STRING =, CHAR = ... disculpa por este error. – lilawood

1

Para al menos SBCL, SLIME puede buscar las definiciones presionando "M-", sin embargo debe compilar SBCL desde el origen para que esto funcione, ya que la ruta a las definiciones fuente está incrustada en el binario, y si usa una distribución binaria, probablemente no tenga los archivos fuente en la misma ubicación.