在Scheme中将表达式显示为字符串

时间:2013-08-01 22:16:39

标签: scheme

(define (display_input_as_entered input)
    (display input)
)

(display_input_as_entered (+ 3 3 2 4))

在这里,我尝试创建一个函数,显示作为输入输入的表达式,而不是显示表达式的结果。我希望(display_input_as_entered (+ 3 3 2 4))打印(+ 3 3 2 4),但它会打印12。是否可以使函数按预期运行,而不对其输入进行任何更改?

我知道在大多数编程语言中都不可能这样做,但我怀疑它可能会以某种方式在Scheme中出现。

2 个答案:

答案 0 :(得分:3)

一个宏可以解决这个问题。例如,在Racket中:

(define-syntax display_input_as_entered
  (syntax-rules ()
    ((_ exp) 'exp)))

(display_input_as_entered (+ 3 3 2 4))
=> '(+ 3 3 2 4)

答案 1 :(得分:3)

您要搜索的是引用。

(quote (+ 3 3 2 4)) ; ==> (+ 3 3 2 4)

由于它被广泛使用,因此它有一个缩写:

'(+ 3 3 2 4) ; ==> (+ 3 3 2 4)

琐事: quote从一开始就与LISP在一起,它在page 131 of the LISP 1 programmers manual上。