Преобразование выражения Схемы к строке

Сначала один я могу думать, , BabySmash
Yahoo Messenger - другой

5
задан user200654 2 November 2009 в 00:34
поделиться

4 ответа

Ты должен пройти через конусы. Когда новый cons начинает писать "(", когда он заканчивается напишите ")" и используйте symbol-> string для символов внутри conses.

Вы можете расширить это с помощью диспетчеризации типов. Может, в схеме тоже есть красивый шрифт?

1
ответ дан 18 December 2019 в 14:48
поделиться

Стандартная схема (по крайней мере, в смысле R5RS) не имеет возможности сделать это, поэтому, если вам нужен переносимый код, вам нужно пройти по структуре самостоятельно. Утомительно, но не слишком сложно (даже для списков с точками). Но если вам просто нужна какая-то рабочая версия, то вам следует заглянуть в руководство по вашей реализации и найти способ сделать это. Ответ почти всегда будет простым, например, в схеме PLT вы должны использовать (формат «~ s» '(лямбда ...))

7
ответ дан 18 December 2019 в 14:48
поделиться

Выражение '(lambda (x ) x) - список в кавычках.

Выражение (lambda (x) x) - это своего рода скомпилированный, непрозрачный, исполняемый, внутренний объект среды выполнения.

symbol-> string просто преобразует символ в строку, которая представляет собой последовательность символов.

Если вы работаете со списком, вы можете просто пройтись по списку и распечатать отдельные компоненты. Фактически (write '(lambda (x) x)) просто распечатает список.

Многие схемы имеют что-то вроде (with-output-to-string ...) , который возвращает строку всего вывода, записанного в стандартный порт.

Однако, если вы сделаете (write (lambda (x) x)) , вы получите неизвестно что. Вы получите все, что предоставляет реализация при сбросе типа исполняемой функции. Некоторые могут распечатать «разборку» с указанием исходного кода. Другие могут просто напечатать #function или что-то столь же бесполезное.

Короче говоря, если вы просто хотите распечатать список, для этого есть всевозможные механизмы.

Если вы хотите распечатать из исходного кода скомпилированной функции, это совершенно другая проблема, очень зависит от реализации и вполне может быть невозможной.

4
ответ дан 18 December 2019 в 14:48
поделиться

Используйте красивый формат :

(pretty-format v [columns]) → string?
1
ответ дан 18 December 2019 в 14:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: