2012-02-19 15 views
8

में मैकन मुझे डॉ रैकेट से आउटपुट पढ़ने में परेशानी हो रही है। डिफ़ॉल्ट रूप से यह मैकन का उपयोग कर सूचियों को प्रदर्शित करता है। उदाहरण के लिए, एसईपीपी व्यायाम 2.32 उत्पादन करता है:डॉ रैकेट

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

मुझे इसे पढ़ने में परेशानी हो रही है। आउटपुट को इस तरह दिखने का कोई तरीका है:

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

धन्यवाद!

उत्तर

12

क्या आप जानते हैं कि आप अपनी #lang लाइन में किस भाषा का उपयोग कर रहे हैं? नीचे दिए गए बाकी निर्देश यह मान रहे हैं कि आप #lang लाइन का उपयोग कर रहे हैं।


आप #lang r5rs में हैं और आप display या write मूल्यों, आप उत्पादन आप उम्मीद कर देखना चाहिए।

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

तुम सिर्फ सहभागिता में मानों नंगे लिखते हैं, तो DrRacket उन्हें print जाएगा, और है कि प्रतिनिधित्व आप देख रहे हैं का उपयोग करता है। ड्रैकेट में, आप customizeprint मान सकते हैं। यहाँ प्रक्रिया है, कदम-दर-कदम:

  1. जाओ भाषा मेनू के लिए, और चुनें भाषा का चयन करें। आपको भाषा संवाद पॉप अप देखना चाहिए।

  2. यदि निचले बाएं बटन पर विवरण दिखाएं, इसे क्लिक करें, और संवाद विंडो को अनुकूलन शामिल करने के लिए विस्तारित किया जाना चाहिए।

  3. आउटपुट शैली विकल्प के लिए देखो। निर्माता, Quasiquote, लिखने, और प्रिंट: वहाँ चार विकल्प होना चाहिए। शैली लिखें, और फिर अनुकूलन की पुष्टि करने के लिए ठीक दबाएं।

एक बार जब आप ऐसा करते हैं, तो:

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

यह अभी भी थोड़ा अलग ढंग से आपकी अपेक्षा से, प्रिंट, घुंघराले ब्रेसिज़ का उपयोग कर जाएगा क्योंकि यह notate है कि सूची संरचना परिवर्तनशील है कोशिश कर रहा है।

यदि यह आपको परेशान करता है, तो हम उसे ठीक कर सकते हैं। अपने प्रोग्राम के शीर्ष के पास निम्न पंक्ति जोड़ें (लेकिन #lang लाइन के बाद)।

(#%require r5rs/init) 

यह पंक्ति एक रैकेट-विशिष्ट मॉड्यूल r5rs अनुपालन में सुधार करने की कोशिश करता है कि r5rs/init बुलाया में खींचती है; विशेष रूप से, ब्रेसिज़ को अंततः परिवर्तनीय जोड़े के लिए राउंड वाले के रूप में प्रिंट करना चाहिए।

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

धन्यवाद! लेखन शैली ने चाल की। मैं # लांग ग्रह नील/एसआईसीपी का उपयोग कर रहा था।लेकिन अब लेखन शैली भाषा के साथ एसआईसीपी प्लानेट 1.16 कस्टम के रूप में दिखाया गया है और कहता है 'पढ़ा: # वर्तमान संदर्भ में सक्षम नहीं है', मुझे इसे बनाने के लिए #land लाइन पर टिप्पणी करना पड़ा। – Dmitri

+1

कूल। मैं बाद में नील के साथ अनुवर्ती हूं कि यह देखने के लिए कि उसके पैकेज के डिफ़ॉल्ट को बदला जा सकता है ताकि यह ** डिफ़ॉल्ट रूप से ** लिख सके। – dyoo

+0

यदि आप DrRacket के बजाय टर्मिनल से चल रहे हैं तो आप आउटपुट शैली को कैसे कॉन्फ़िगर करते हैं? (मैं Emacs में geiser-mode के माध्यम से रैकेट चला रहा हूँ)। – crowding

संबंधित मुद्दे