2011-05-21 7 views
5

Estoy trabajando a través de SICP y quería probar algunos de los ejemplos engañosamente. Estoy probando los ejemplos de transmisión y quería una implementación para cons-stream, que recibí de this StackOverflow question. Sin embargo, cuando escribo esto en la astucia me sale:¿Qué hay de malo con esta macro de definición de sintaxis en el esquema?

guile> (define-syntax cons-stream 
    (syntax-rules() 
    [(cons-stream x y) (cons x (delay y))])) 
ERROR: invalid syntax() 
ABORT: (misc-error) 

no tengo idea de lo que está mal con esto - He intentado sustituir() con '(), la eliminación de la [], pero todavía no funciona a pesar de que parece ser valid R5RS. Actualmente estoy en Guile 1.8.7, no puedo ver un paquete para v2.0.1 que mencione GNU docs, ¿podría ser por eso que no funciona para mí?

Respuesta

7

Parece que es necesario importar apoyo a syntax-rules primera (ver http://www.gnu.org/software/guile/docs/docs-1.8/guile-ref/Syntax-Rules.html):

(use-syntax (ice-9 syncase)) 

Luego hay que cambiar los corchetes a parens; después de eso debería funcionar.

Definitivamente no cite la lista de literales; esa es una secuencia de identificadores, como lambda formales, no una expresión.

+0

increíble, muchas gracias! –

Cuestiones relacionadas