有没有办法将代码转换为带有适当空格或甚至漂亮打印的方案中的字符串?
因此,当我将此应用于类似(+ 1 2)的形式时,它应该导致“(+ 1 2)”而不是“+12”。
答案 0 :(得分:7)
尝试引用表达式,这应该足以显示它,并且它更容易操作(比操作字符串更容易):
(display '(+ 1 2))
=> '(+ 1 2) ; a quoted expression
或者如果你肯定需要一个字符串,在Racket你可以做这样的事情 - 但是再一次,必须首先引用表达式:
(format "~a" '(+ 1 2))
=> "(+ 1 2)" ; a string
另一种方法,使用字符串输出端口:
(define o (open-output-string))
(write '(+ 1 2) o)
(get-output-string o)
(close-output-port o)
=> "(+ 1 2)" ; a string
最后,使用Racket的pretty printing库的示例:
(require racket/pretty)
(define o (open-output-string))
(pretty-write '(+ 1 2) o)
(get-output-string o)
(close-output-port o)
=> "(+ 1 2)\n" ; a formatted string
答案 1 :(得分:4)
在诡计中,你可以:
(use-modules (ice-9 pretty-print))
(pretty-print value output-port)
其中expr
是任何值,output-port
是任何端口(如果要将输出捕获为字符串,则为字符串端口)