2012-02-19 12 views
8

Mam problemy z odczytem danych wyjściowych z dr rakiety. Domyślnie wyświetla listy używając mcons. Na przykład ćwiczenie sicp 2.32 generuje:mcons in dr rakieta

> (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 '()))) '())))))))) 
'()) 

Mam problem z przeczytaniem tego. Czy jest sposób na sprawienie, aby wyglądał następująco:

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

Dzięki!

Odpowiedz

12

Czy wiesz, jakiego języka używasz w swojej linii #lang? Pozostałe instrukcje poniżej zakładają, że używasz linii #lang.


Jeśli jesteś w #lang r5rs i display lub write wartości, należy widzieć wyjście z oczekiwaniami.

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

Jeśli wystarczy wpisać wartości gołe w interakcjach, DrRacket je print i że wykorzystuje reprezentację jesteś widząc. W DrRacket można uzyskać customize sposób, w jaki wartości print. Oto sposób, krok po kroku:

  1. Przejdź do menu Języki wybierz Wybierz język. Powinieneś zobaczyć okno dialogowe języka.

  2. Jeśli przycisk w lewym dolnym rogu mówi Pokaż szczegóły, kliknij go, a okno dialogowe powinno rozwinąć się, aby uwzględnić dostosowania.

  3. Poszukaj opcji Styl wyjścia . Nie powinno być cztery możliwości: Konstruktor, Quasiquote, zapisu i druku. Wybierz styl wpisz, a następnie naciśnij Ok, aby potwierdzić dostosowanie.

Po wykonaniu tej czynności, a następnie:

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

będzie nadal drukować nieco inaczej, niż można się spodziewać, używając nawiasów klamrowych, ponieważ stara się zapisywać, że struktura lista jest zmienny.

Jeśli Ci to przeszkadza, możemy to naprawić. Dodaj następującą linię u góry programu (ale po linii #lang).

(#%require r5rs/init) 

Linia ta ciągnie w module Racket specyficznej nazwie r5rs/init która stara się poprawić r5rs zgodności; w szczególności nawiasy klamrowe powinny być ostatecznie wydrukowane jako okrągłe dla par zmiennych.

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

Dzięki! Styl pisania zadziałał. Używałem #lang planet neil/sicp.Ale teraz, gdy pokazujemy język w stylu SICP PLaneT 1.16 i mówimy "czytaj: #lang nie jest włączony w bieżącym kontekście", musiałem skomentować linię #land, żeby to zadziałało. – Dmitri

+1

Cool. Później skontaktuję się z Neilem, aby sprawdzić, czy domyślne ustawienia jego paczki mogą zostać zmienione, aby domyślnie był ** zapis **. – dyoo

+0

Jak skonfigurować styl wyjściowy, jeśli korzystasz z terminala zamiast DrRacket? (Używam rakiety przez tryb geisera w Emacsie). – crowding