首页 > 解决方案 > 将 Lisp 语法与 (operator-integer-operator) 格式混淆

问题描述

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

(defparameter *binary-operators*
  '((+ 1 +) (- 1 -) (* 2 *)
    (x 2 *) (/ 2 %) (^ 3 expt)))

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

标签: lispcommon-lisp

解决方案


在 Common Lisp 中,

(defparameter name initial-value)

(参见手册)引入了一个新的特殊(全局)变量,该变量name具有一个新值,由评估给出initial-value

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

从列表中存在的值猜测,这似乎是一个分配了算术运算符列表的变量,每个算术运算符都有优先级,并具有等效的 Common Lisp 运算符/函数。也许这是一些将算术表达式映射到 lisp s 表达式中的程序的一行,或者类似的东西。


推荐阅读