mcons

2012-02-19 3 views
8

Dr raketten çıktı okumada sorun yaşıyorum. Varsayılan olarak mcons kullanarak listeler görüntüler. Örneğin, sicp exercise 2.32 üretir:mcons

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

Bunu okumakta güçlük çekiyorum. Çıkışın benzerini yapmanın bir yolu var:

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

Teşekkürler!

cevap

12

#lang hattınızda hangi dili kullanıyorsunuz biliyor musunuz? Aşağıdaki talimatların geri kalanında bir #lang satırı kullandığınız varsayılmaktadır. Eğer #lang r5rs vardır ve display veya write değerleri beklediğiniz çıkışı görmelisiniz


edin. Sadece Etkileşimlerdeki çıplak değerlerini yazarsanız

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

, DrRacket onları print edecek ve bu gördüğün temsilini kullanır. DrRacket'te, print değerleriyle customize yapabilirsiniz. Süreç şöyledir, adım-adım: Dil menüsüne

  1. Git ve Dil Seç seçin. Dil diyaloğunu görmelisiniz.

  2. Sol alttaki düğme , Ayrıntılar'u tıklatırsa, bunu tıklatın ve iletişim pencereleri özelleştirmeleri içerecek şekilde genişlemelidir.

  3. Çıkış Stili seçeneklerine bakın. Oluşturucu, Quasiquote, yazma ve baskı: Dört seçenek olmalıdır. Özelleştirmeyi onaylamak için yazın, yazın ve Ok tuşlarına basın.

sonra, bunu bir kez: liste yapısı değişken olduğunu notate çalışıyor çünkü

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

Hala, küme parantezi kullanarak, biraz farklı beklediğinizden daha yazdırılır.

Bu sizi rahatsız ediyorsa, bunu düzeltebiliriz. Programınızın üst kısmına yakın bir çizgi ekleyin (ancak #lang satırından sonra).

(#%require r5rs/init) 

Bu hat R5RS uyumu arttırmak için çalışır r5rs/init adı verilen bir raket özgü modül çeker; Özellikle, parantezler nihayetinde değişebilir çiftler için yuvarlak olanlar olarak basılmalıdır.

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

Teşekkürler! Yazma stili hile yaptı. #lang gezegeni neil/sicp kullanıyordum.Ancak şimdi yazma stili dili SICP PLaneT 1.16 ile özel olarak gösteriliyor ve 'oku: #lang mevcut bağlamda etkin değil' diyor, çalışmasını sağlamak için #land hattını yorumlamak zorunda kaldım. – Dmitri

+1

Serin. Paketinin varsayılanlarının değiştirilip değiştirilemeyeceğini görmek için Neil ile daha sonra takip edeceğim, böylece varsayılan olarak ** yazınız. – dyoo

+0

DrRacket yerine bir terminalden çalışıyorsanız çıkış stilini nasıl yapılandırırsınız? (Emacs’de Geiser modu ile Racket’i çalıştırıyorum). – crowding