如何反转格式?

时间:2011-08-16 20:34:31

标签: scheme racket

格式可以将任何类型转换为字符串,例如

(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 个答案:

答案 0 :(得分:4)

使用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 :(得分:1)

如果您只是指使用“〜s”格式化指令,那么“read”是正确的选择。查看球拍“printf”的文档,然后点击“写入”的定义以获取更多信息。

另一方面,如果您要反转 format的任何使用,则可能没有唯一的答案;例如,撤消(format "~a~a" "abc" "def")是不可能的(在某种意义上,有多个可能的调用产生abcdef)。