Выражение '(lambda (x) x)
является списком в кавычках.
Выражение (lambda (x) x)
является неким скомпилированным, непрозрачным, исполняемым внутренним объектом среды выполнения.
symbol->string
просто преобразует символ в строку, представляющую собой последовательность символов.
Если вы работаете со списком, вы можете просто просмотреть список и распечатать отдельные компоненты. На самом деле (write '(lambda (x) x))
просто распечатает список.
Во многих схемах есть что-то похожее на (with-output-to-string ... )
, которое возвращает строку всех выходных данных, записанных в стандартный порт.
Однако, если вы сделаете (write (lambda (x) x))
, вы получите, кто что знает. Вы получите все, что обеспечивает реализация при выводе типа исполняемой функции. Некоторые могут распечатать «разборку» с указанием исходного кода. Другие могут просто напечатать #function
или что-то такое же бесполезное.
Короче говоря, если вы просто хотите распечатать список, для этого есть все виды механизмов.
Если вы хотите распечатать исходный код скомпилированной функции, это совершенно другая проблема, сильно зависящая от реализации и вполне может быть невозможной.