1
(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 中它可能以某种方式成为可能。

4

2 回答 2

4

您正在寻找的是报价。

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

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

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

琐事: quote从一开始就使用 LISP,它位于 LISP 1 程序员手册的第 131 页

于 2013-08-02T17:17:37.950 回答
3

宏将在这里解决问题。例如,在球拍中:

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

(display_input_as_entered (+ 3 3 2 4))
=> '(+ 3 3 2 4)
于 2013-08-01T22:23:30.243 回答