那我们现在怎么办?对了,quote到底是做什么的?它只是返回未计算的参数!还记得我在开始时说的关于正则函数的内容吗?结果表明,一些操作符/函数需要 没有计算它们的参数。比如 IF ——如果没有执行 else 分支,您不希望它被计算,对吗?所谓的 特别行动小组和宏就是这样工作的。特殊运算符也是语言的“公理”——最小规则集——在这个公理上,您可以通过以不同的方式将它们组合在一起来实现 Lisp 的其余部分。
不过,回到 quote:
Lisp> (quote spiffy-symbol)
SPIFFY-SYMBOL
Lisp> 'spiffy-symbol ; ' is just a shorthand ("reader macro"), as shown above
SPIFFY-SYMBOL
比较(关于 Steel-Bank Common Lisp) :
Lisp> spiffy-symbol
debugger invoked on a UNBOUND-VARIABLE in thread #<THREAD "initial thread" RUNNING {A69F6A9}>:
The variable SPIFFY-SYMBOL is unbound.
Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL.
restarts (invokable by number or by possibly-abbreviated name):
0: [ABORT] Exit debugger, returning to top level.
(SB-INT:SIMPLE-EVAL-IN-LEXENV SPIFFY-SYMBOL #<NULL-LEXENV>)
0]
当我们想要传递一个参数本身,而不是传递参数的值时,那么我们使用引号。它主要与在使用列表、对和原子时传递的过程有关
这在 C 编程语言中是不可用的(大多数人开始使用 C 编程,因此我们感到困惑)
这是 Scheme 编程语言中的代码,它是 lisp 的一种方言,我想您可以理解这段代码。
(define atom? ; defining a procedure atom?
(lambda (x) ; which as one argument x
(and (not (null? x)) (not(pair? x) )))) ; checks if the argument is atom or not
(atom? '(a b c)) ; since it is a list it is false #f