2011-09-16 15 views
6

Soy un nuevo alumno de Scheme/Racket, así que disculpe cualquier error evidente de sintaxis.Esquema: listas de tres elementos punteados que retornan de manera extraña (como un operador infijo?)

Surgió en la clase de hoy que la lista Combinación de '(a, b, c) debe ser válido, pero cuando nos encontramos con él, se volvieron:

>'(a . b . c) 
(b a c) 

que no tiene sentido. Afaik, el intérprete debe crear una celda de cons con auto 'a y cdr' b, y la 'c debe ser inválida. Dicho eso, el intérprete está haciendo algo realmente extraño aquí. Esto funciona con #lang scheme, #lang racket y otros. Estamos utilizando DrRacket como intérprete.

Curiosamente,

>'(a . b . c . d) 

lanza una excepción y muere.

Soy muy curioso y me encantaría poder entender esto ya que soy nuevo en el idioma. Google fue muy inútil (probablemente porque los términos de búsqueda son un tanto ambiguos) ¡Gracias!

EDITAR: Puede ser porque '(a . b . c) se interpreta con b como un operador infijo. Por ejemplo: >(4 . + . 6) devuelve 10. ¿Quizás el intérprete usa b como un operador? es decir, (b a c) como (+ 4 6), infix-wise.

Expermentation dice:

>(define b +) 
>(define a 4) 
>(define c 6) 
>(a . b . c) 
10 

Así que creo que esto resuelve el problema, pero todavía no entiende por completo el uso de la "" operador en este caso. Creo que hemos resuelto esto, pero cualquier otra idea sería muy apreciada.

+0

Los puntos a cada lado del operador me recuerdan a Fortran: 1 .LT. 3 – JasonFruit

Respuesta

8

Respuesta corta: ya lo tienes. Para obtener más información sobre este uso de puntos específico de Racket, consulte la documentación para infix en los documentos de Racket.

4

Es una característica especial del lector de Racket. (Consulte la respuesta de John.)

Para otras implementaciones, puede utilizar el lector readable S-expressions para poder leer expresiones infija. Utiliza llaves. por ejemplo, {3 + 4} se lee como (+ 3 4). Aún más especial (que el lector infijo de Racket), puede usar {3 + 4 + 5} o {3 + 4 + 5 + 6}; leerán como (+ 3 4 5) y (+ 3 4 5 6) respectivamente.

+1

Vea también esta implementación de S-exps legibles para raqueta: http://planet.racket-lang.org/display.ss?package=sweet.plt&owner=asumu –

Cuestiones relacionadas