2012-02-19 12 views
8

ドリルラケットからの出力の読み込みに問題があります。デフォルトでは、mconsを使ってリストを表示します。たとえば、sicp exercise 2.32は、次のように生成されます。ドクターラケットの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 '()))) '())))))))) 
'()) 

これは読めません。出力を次のようにする方法はありますか?

(() (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なり、それはあなたが見ている表現を使用しています。 DrRacketでは、の値をcustomizeとすることができます。ここでの処理は、ステップバイステップで、です:

  1. ゴー言語メニューに、そして言語を選択し選択します。言語ダイアログのポップアップが表示されます。

  2. 左下のボタンがと表示されている場合詳細を表示するをクリックすると、ダイアログウィンドウが開き、カスタマイズが追加されます。

  3. 出力スタイルオプションを探します。 コンストラクタ準クォート書き込み、および印刷:4つの選択肢があるはずです。 スタイルを選択し、Okを押してカスタマイズを確定します。リスト構造が変更可能であることを記譜しようとしているので、

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

    それはまだ、中括弧を使用して、少し異なりますが、予想よりも出力します。これを行うと、その後は

これが気になる場合は、修正することができます。プログラムの先頭近くに次の行を追加します(ただし、#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

ありがとうございます!書き込みスタイルはトリックでした。私は#lang planet neil/sicpを使っていました。しかし、現在、書式言語でSICP PLaneT 1.16というカスタムを表示し、「読み込み:現在のコンテキストで#langが有効になっていません」と言うと、#land行をコメントアウトして動作させる必要がありました。 – Dmitri

+1

Cool。後ほどNeilにフォローアップして、パッケージのデフォルトを変更してデフォルトで** write **にすることができるかどうかを確認します。 – dyoo

+0

DrRacketではなく端末から実行している場合、どのように出力スタイルを設定しますか? (私はEmacsのgeiser-mode経由でRacketを実行しています)。 – crowding

関連する問題