парсинг s-выражений с помощью ракетки - PullRequest
0 голосов
/ 05 июля 2018

Я хотел бы прочитать в стандартном файле ракетки и анализировать s-выражения в нем в виде списка. Например, учитывая этот вход:

(define y 1)
(define (foo x)
  (+ x 1))

должно возвращаться: '("(define y 1)" "(define (foo x) (+ x 1))")

Какой самый простой способ сделать это? Я думал об использовании port->string и друзей, но это все еще требует сопоставления ) s. Есть ли что-то попроще?

1 Ответ

0 голосов
/ 05 июля 2018

Ваш ожидаемый результат немного сбивает с толку. Почему вы хотите отдельные s-выражения в виде строк? В любом случае вы, вероятно, захотите port->list или file->list, которые оба выдают список s-выражений. Используемые на вашем примере ввода, они дают следующий результат:

'((define y 1) (define (foo x) (+ x 1))

Если вы по какой-то причине действительно хотите, чтобы отдельные s-выражения были строками, вы всегда можете преобразовать их обратно, сопоставив результат ~s, но я не уверен, почему такая вещь было бы полезно.

...