Как сделать обратный формат? - PullRequest
3 голосов
/ 17 августа 2011

формат может превратить любой тип в строку, например,

(define lam-form (list `lambda (list `x ) (list `when (list `> `x 0) (list `* 100 `x ))))
(format "~s" lam-form)

Результат будет: "(lambda (x) (when (> x 0) (* 100 x)))"

Тогда мой вопрос: как сделать обратное? то есть поверните "(lambda (x) (when (> x 0) (* 100 x)))" обратно к '(lambda (x) (when (> x 0) (* 100 x)))

Ответы [ 2 ]

4 голосов
/ 17 августа 2011

Использование read.

Welcome to Racket v5.1.3.1.
-> (read (open-input-string "(lambda (x) (when (> x 0) (* 100 x)))"))
'(lambda (x) (when (> x 0) (* 100 x)))
1 голос
/ 17 августа 2011

Если вы имеете в виду только использование директивы форматирования "~ s", тогда "чтение" является правильным выбором.Посмотрите документы для "printf" ракетки, затем кликните по определению "write" для получения дополнительной информации.

Если, с другой стороны, вы хотите отменить любое использование format, тогда не может быть уникального ответа;например, отмена (format "~a~a" "abc" "def") невозможна (в том смысле, что существует несколько возможных вызовов, которые производят abcdef).

...