Ваш ожидаемый результат немного сбивает с толку. Почему вы хотите отдельные s-выражения в виде строк? В любом случае вы, вероятно, захотите port->list
или file->list
, которые оба выдают список s-выражений. Используемые на вашем примере ввода, они дают следующий результат:
'((define y 1) (define (foo x) (+ x 1))
Если вы по какой-то причине действительно хотите, чтобы отдельные s-выражения были строками, вы всегда можете преобразовать их обратно, сопоставив результат ~s
, но я не уверен, почему такая вещь было бы полезно.