格式可以将任何类型转换为字符串,例如
(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)))
答案 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
)。