2010-10-13 12 views
6

¿Cuál sería un ejemplo de un condicional anafórico en Lisp? Por favor, explica el código también.¿Cuál sería un ejemplo de un condicional anafórico en Lisp?

+1

Estoy familiarizado con el término "anafórico" en lo que respecta a las lenguas naturales; por ejemplo, un pronombre puede considerarse una referencia anafórica de un sustantivo mencionado anteriormente. "John es programador. Trabaja para Google". En este ejemplo, "él" es una referencia anafórica de "Juan". Así que creo que debes explicar qué significa un "condicional anafórico" en el contexto de la programación de Lisp, no es un término comúnmente usado. –

+0

** @ Jim_Lewis: ** Aquí hay una explicación de lo que significa un "condicional anafórico" en el contexto de la programación de Lisp: http://weblogs.java.net/blog/2006/06/29/more-literate-programming-language- level-anaphora – blunders

+2

@Jim Lewis: Como era de esperar, eso es precisamente lo que * anaphoric * significa al referirse a las macros. Ver mi respuesta para enlaces y ejemplos. –

Respuesta

4

Un ejemplo es el Common Lisp LOOP:

(loop for item in list 
     when (general-predicate item) 
     collect it) 

La variable IT tiene el valor de la expresión de prueba. Esta es una característica de ANSI Common Lisp LOOP.

Ejemplo:

(loop for s in '("sin" "Sin" "SIN") 
     when (find-symbol s) 
     collect it) 

vuelve

(SIN) 

porque sólo "SIN" es un nombre para un símbolo existente, aquí el símbolo SIN. En Common Lisp, los nombres de los símbolos tienen nombres internamente en mayúsculas por defecto.

+0

** @ Rainer_Joswig: ** Wow, gracias - eso fue increíblemente claro para mí. ¡¡Una vez más, gracias!! – blunders

+0

** @ Rainer_Joswig: ** Según su experiencia, ¿cuál ha sido la mejor manera de aprender LISP para usted? – blunders

9

Paul Graham's On Lisp tiene un capítulo en Anaphoric Macros.

Básicamente, es una manera abreviada de escribir declaraciones que evita repetir el código. Por ejemplo, comparar:

(let ((result (big-long-calculation))) 
    (if result 
     (foo result))) 

y

(if (big-long-calculation) 
    (foo it)) 

donde it es un nombre especial que hace referencia a lo que simplemente se calculó en (big-long-calculation).

+0

** @ Greg Hewgill: ** Gracias, todavía perdido en el código de Paul Graham, pero es divertido de procesar. – blunders

+2

@blunders: De hecho. Las macros Anaphoric probablemente no sean el mejor lugar para comenzar, a menos que ya estés muy familiarizado con los diferentes estilos de macros en Lisp. En Lisp es una gran lectura. –

+0

** @ Greg Hewgill: ** De acuerdo. He escaneado algunos libros de LISP, principalmente The Little Schemer, y similares. El "condicional anafórico" surgió aleatoriamente al hacer una investigación para esta pregunta: http://stackoverflow.com/questions/3920046/is-it-common-for-a-language-to-evalute-undefined-as-equal-to- falso-si-así-por qué-es – blunders

Cuestiones relacionadas