2012-02-19 13 views
8

Tengo problemas para leer la salida de dr racket. Por defecto, muestra listas usando mcons. Por ejemplo, sicp exercise 2.32 produce:mcons en dr racket

> (subsets (list 1 2 3)) 
(mcons 
(mcons 
    '() 
    (mcons 
    (mcons 3 '()) 
    (mcons 
    (mcons 2 '()) 
    (mcons 
    (mcons 2 (mcons 3 '())) 
    (mcons 
     (mcons 1 '()) 
     (mcons 
     (mcons 1 (mcons 3 '())) 
     (mcons 
     (mcons 1 (mcons 2 '())) 
     (mcons (mcons 1 (mcons 2 (mcons 3 '()))) '())))))))) 
'()) 

Tengo problemas para leer esto. ¿Hay alguna manera de hacer que la salida se vea como:

(() (3) (2) (2 3) (1) (1 3) (1 2) (1 2 3)) 

Gracias!

Respuesta

12

¿Sabe qué idioma está usando en su línea #lang? El resto de las instrucciones siguientes presuponen que está utilizando una línea #lang.


Si se encuentra en #lang r5rs y display o write los valores, debería ver la salida esperada.

> (define p (list 1 2)) 
> (display p) 
(1 2) 
> (set-car! p 'one) 
> (display p) 
(one 2) 

Si sólo tiene que teclear los valores descubiertos en las interacciones, DrRacket se print ellos, y que utiliza la representación que se está viendo. En DrRacket, puede customize la forma en que los valores print. Aquí está el proceso, paso a paso:

  1. Ir al menú de idiomas , y seleccione Elija el idioma. Debería ver el diálogo de idioma emergente.

  2. Si el botón de la esquina inferior izquierda indica Mostrar detalles, haga clic en él y la ventana de diálogo se expandirá para incluir personalizaciones.

  3. Busque la opción Output Style. Debe haber cuatro opciones: Constructor, Cuasiquote, escribir y imprimir. Seleccione escriba estilo, y luego presione Ok para confirmar la personalización.

Una vez hecho esto, entonces:

> (display (list 1 2)) 
(1 2) 
> (write (list 1 2)) 
(1 2) 
> (list 1 2) 
{1 2} 

seguirá siendo imprimir levemente distinta a la esperada, se utilizan llaves, porque está tratando de anotar que la estructura de la lista es mutable.

Si esto te molesta, podemos solucionarlo. Agregue la siguiente línea cerca de la parte superior de su programa (pero después de la línea #lang).

(#%require r5rs/init) 

Esta línea de tira en un módulo de la raqueta específico llamado r5rs/init que trata de mejorar el cumplimiento R5RS; en particular, las llaves deberían finalmente imprimirse como redondas para pares mutables.

> (display (list 1 2)) 
(1 2) 
> (write (list 1 2)) 
(1 2) 
> (list 1 2) 
(1 2) 
+0

¡Gracias! El estilo de escritura hizo el truco. Estaba usando #lang planet neil/sicp.Pero ahora, con el estilo de escritura, el lenguaje muestra como SICP PLaneT 1.16 personalizado y dice 'leer: #lang no habilitado en el contexto actual', tuve que comentar la línea #land para que funcione. – Dmitri

+1

Cool. Voy a seguir con Neil más tarde para ver si los valores predeterminados de su paquete se pueden cambiar para que ** escriba ** de forma predeterminada. – dyoo

+0

¿Cómo se configura el estilo de salida si se está ejecutando desde un terminal en lugar de DrRacket? (Estoy ejecutando Racket a través del modo geiser en Emacs). – crowding

Cuestiones relacionadas