мконы в рэкет - PullRequest
       56

мконы в рэкет

10 голосов
/ 19 февраля 2012

У меня проблемы с чтением вывода с др ракетки.По умолчанию он отображает списки, используя 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))

Спасибо!

1 Ответ

15 голосов
/ 19 февраля 2012

Знаете ли вы, какой язык вы используете в своей строке #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. Перейдите в меню Language и выберите Выберите язык .Вы должны увидеть всплывающее диалоговое окно языка.

  2. Если кнопка в левом нижнем углу говорит Показать детали , нажмите ее, и диалоговое окно должно развернуться, чтобы включить настройки.

  3. Найдите вариант Стиль вывода .Должно быть четыре варианта: Конструктор , Квазицитат , запись и печать .Выберите запись стиль, а затем нажмите Ok , чтобы подтвердить настройку.

Как только вы это сделаете, тогда:

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

Он будет печататься немного иначе, чем вы ожидаете, используя фигурные скобки, потому что он пытается записать, что структура списка изменчива.

Если это вас беспокоит, мы можем это исправить.Добавьте следующую строку вверху вашей программы (но после строки #lang).

(#%require r5rs/init)

Эта строка загружает специфичный для Racket модуль с именем r5rs/init, который пытаетсяулучшить соответствие r5rs;в частности, скобки должны, наконец, печататься как круглые для изменяемых пар.

> (display (list 1 2))
(1 2)
> (write (list 1 2))
(1 2)
> (list 1 2)
(1 2)
...