Debugging 如何将代码转换为字符串或在scheme中使用适当的空格打印它?

Debugging 如何将代码转换为字符串或在scheme中使用适当的空格打印它?,debugging,macros,lisp,scheme,Debugging,Macros,Lisp,Scheme,有没有一种方法可以在scheme中将代码转换为字符串,并使用适当的空格甚至漂亮的打印 因此,当我将其应用于(+12)这样的表单时,它应该会导致“(+12)”而不是“+12”。尝试引用表达式,这应该足以显示它,并且操作起来更容易(比操作字符串更容易): 或者,如果您确实需要一个字符串,在Racket中,您可以执行类似的操作-但同样,必须首先引用表达式: (format "~a" '(+ 1 2)) => "(+ 1 2)" ; a string 另一种方法是使用字符串输出端口: (defi

有没有一种方法可以在scheme中将代码转换为字符串,并使用适当的空格甚至漂亮的打印


因此,当我将其应用于(+12)这样的表单时,它应该会导致“(+12)”而不是“+12”。

尝试引用表达式,这应该足以显示它,并且操作起来更容易(比操作字符串更容易):

或者,如果您确实需要一个字符串,在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库的一个示例:

在guile中,您可以:

(use-modules (ice-9 pretty-print))
(pretty-print value output-port)

其中,
expr
是任意值,
output port
是任意端口(例如,如果要将输出捕获为字符串,则为字符串端口)

应适用于所有方案!
(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
(use-modules (ice-9 pretty-print))
(pretty-print value output-port)