我是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 + +)没有意义.上面的语法代表什么?
在Common Lisp中,
(defparameter name initial-value)
Run Code Online (Sandbox Code Playgroud)
(参见手册)介绍了一个name
带有新值的新特殊(全局)变量,通过评估给出initial-value
.
因此,在上面的示例中,为特殊变量*binary-operators*
分配了三元组列表,每个三元组由符号,数字和另一个符号组成.换句话说,它会将一些数据分配给变量,而不是像您所想的那样重新定义语言的语法.
根据列表中的值进行猜测,这似乎是一个变量,它被赋予一个算术运算符列表,每个算术运算符都具有优先级,并且具有等效的Common Lisp运算符/函数.也许这是一些程序的行,它在lisp s表达式中映射算术表达式,或类似的东西.