11

drラケットからの出力を読み取るのに問題があります。デフォルトでは、mconsを使用してリストを表示します。たとえば、sicp演習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))

ありがとう!

4

1 に答える 1

15

ラインで使用している言語を知っています#langか? #lang以下の残りの手順は、回線を使用していることを前提としています。


あなたが入っていて#lang r5rs、あなたdisplayまたはwrite値があれば、期待する出力が表示されるはずです。

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

Interactions にそのまま値を入力すると、DrRacket が値を入力printし、表示されている表現を使用します。DrRacket では、値の付け方をカスタマイズできprintます。プロセスは次のとおりです。

  1. [言語] メニューに移動し、 [言語の選択] を選択します。言語ダイアログがポップアップ表示されるはずです。

  2. 左下のボタンにShow Detailsと表示されている場合は、それをクリックすると、ダイアログ ウィンドウが拡張され、カスタマイズが含まれます。

  3. [出力スタイル] オプションを探します。ConstructorQuasiquotewrite、およびprintの4 つの選択肢があります。書き込みスタイルを選択し、[ OK]を押してカスタマイズを確認します。

これを行うと、次のようになります。

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

リスト構造が変更可能であることを示しようとしているため、中括弧を使用すると、予想とは若干異なる結果が出力されます。

これが気になる場合は、修正できます。次の行をプログラムの先頭近くに追加します (ただし、#lang行の後)。

(#%require r5rs/init)

r5rs/initこの行は、 r5rs 準拠を改善しようとする Racket 固有のモジュールを取り込みます。特に、変更可能なペアのブレースは最終的に丸いものとして出力されるはずです。

> (display (list 1 2))
(1 2)
> (write (list 1 2))
(1 2)
> (list 1 2)
(1 2)
于 2012-02-19T08:12:06.880 に答える