resueltos recursivas principiantes para listas inteligencia imprimir funciones ejercicios ejemplo artificial lisp common-lisp slime swank

recursivas - ¿Qué hace#+#. significa en lisp?



manual lisp (5)

2.4.8.17 Sharpsign Plus http://www.lispworks.com/documentation/HyperSpec/Body/02_dhq.htm # + expresión de prueba Macro de lectura, si la prueba es verdadera, lea la expresión; de lo contrario, léala como un espacio en blanco.

2.4.8.6 Sharpsign Dot http://www.lispworks.com/documentation/HyperSpec/Body/02_dhf.htm El #. La sintaxis de foo realiza una evaluación en tiempo de lectura de foo.

http://www.lispworks.com/documentation/HyperSpec/Body/02_dh.htm Todos los operadores #X (definidos por el HyperSpec de Lisp)

¿Por qué el HyperSpec de Lisp tiene que ser tan difícil de leer? Probablemente porque está hecho por comité. Yo digo que es una de las razones por las que Lisp no es popular. Además, Lisp es demasiado académico, y las barreras de entrada son demasiado altas (la curva de aprendizaje y la comunidad de apoyo no son tan grandes ... no hay 10 mil pequeños programas para comenzar fácilmente (en cierto modo, implementación que está utilizando)).

Es casi imposible buscar en Google, por lo tanto, mi comprensión se limita a las pistas contextuales de la lectura del código fuente del limo: ¿tal vez es parte del sistema de objetos en la normalidad? ¿Algo como ''yo''?

retazo:

(cond #+#.(swank-backend::sbcl-with-new-stepper-p)

Tal vez esto lo hará más fácil de googlear: libra más libra // símbolo hash más hash // octothorp más octothorp


Además, #-foo(code to execute) ejecutará el código solo si foo no está en *features* .

Información sobre #+ , #. , etc. es difícil de encontrar incluso en Common Lisp HyperSpec , pero las páginas de HyperSpec relevantes se pueden encontrar en Google "Sharpsign menos", etc. (Gracias Austin).



Eso es bastante raro de ver.

#+clim clim:+red+ #-clim mygraphics:+red+

arriba significa que el lector devuelve un símbolo rojo y depende de si hay un símbolo con el nombre CLIM en la lista de características *features* . Eso es un mecanismo incorporado en Common Lisp.

#.(cl:if (cl:zerop (cl:random 2)) :high :low)

Arriba también hay un mecanismo del lector. Permite hacer cálculos en tiempo de lectura. Que por cierto. es un problema de seguridad y en las aplicaciones Lisp debería estar deshabilitado - vea la variable *read-eval* para controlar esto. En el momento de la lectura, el lector que usa READ devolverá: ALTO o: BAJO, al azar.

La combinación #+#.(FOO) BAR significa que la función foo devuelve un símbolo en el momento de la lectura y luego el lector verifica este símbolo si hay un símbolo con este nombre en la lista de *features* y si ese es el símbolo caso, entonces se lee el siguiente elemento de entrada, de lo contrario, se omite el siguiente elemento.

Ejemplo trivial, IF siempre devuelve: CAPI en este ejemplo:

En LispWorks (donde CAPI está en la lista de características):

CL-USER 41 > (read-from-string "#+#.(cl:if cl:t :capi :clim) a b") A 31

En SBCL

* (read-from-string "#+#.(cl:if cl:t :capi :clim) a b") B 32


Son los caracteres macros del lector Common Lisp:

una notación textual introducida por envío en uno o dos caracteres que define la sintaxis de propósito especial para uso del lector Lisp, y que se implementa mediante una función de macro lector.

Las macros de los lectores no deben confundirse con las macros normales , ya que no tienen nada que ver entre sí.

La función set-dispatch-macro-character se puede usar para extender la sintaxis de Common Lisp con macros de lector personalizadas.