将Lisp语法与(operator-integer-operator)格式混淆

AJ *_*del 1 lisp common-lisp

我是lisp的新手,我对这个LISP语法有疑问:

(defparameter *binary-operators*
  '((+ 1 +) (- 1 -) (* 2 *)
    (x 2 *) (/ 2 %) (^ 3 expt)))
Run Code Online (Sandbox Code Playgroud)

根据我的理解,defparameter允许重新分配二元运算符变量,但我对如何评估(+ 1 +),( - 1 - )...感到困惑.我知道在LISP中(+ 4 6)会导致(4 + 6)= 10但是相同的逻辑会导致(1 + +)没有意义.上面的语法代表什么?

Ren*_*nzo 6

在Common Lisp中,

(defparameter name initial-value)
Run Code Online (Sandbox Code Playgroud)

(参见手册)介绍了一个name带有新值的新特殊(全局)变量,通过评估给出initial-value.

因此,在上面的示例中,为特殊变量*binary-operators*分配了三元组列表,每个三元组由符号,数字和另一个符号组成.换句话说,它会将一些数据分配给变量,而不是像您所想的那样重新定义语言的语法.

根据列表中的值进行猜测,这似乎是一个变量,它被赋予一个算术运算符列表,每个算术运算符都具有优先级,并且具有等效的Common Lisp运算符/函数.也许这是一些程序的行,它在lisp s表达式中映射算术表达式,或类似的东西.