(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中出现。
答案 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上。