lisp - 将 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 + +) 没有意义。上面的语法代表什么?
解决方案
在 Common Lisp 中,
(defparameter name initial-value)
(参见手册)引入了一个新的特殊(全局)变量,该变量name
具有一个新值,由评估给出initial-value
。
因此,在上面的示例中,特殊变量*binary-operators*
被分配了一个三元组列表,每个元组由一个符号、一个数字和另一个符号组成。换句话说,它将一些数据分配给一个变量,而不是像您想象的那样重新定义语言的语法。
从列表中存在的值猜测,这似乎是一个分配了算术运算符列表的变量,每个算术运算符都有优先级,并具有等效的 Common Lisp 运算符/函数。也许这是一些将算术表达式映射到 lisp s 表达式中的程序的一行,或者类似的东西。
推荐阅读
- laravel - Laravel 气闸令牌
- c# - 如何从 Excel 中捕获 KeyUp 事件
- r - 时间变量不是maftools中生存分析的数字
- c# - 你能帮我处理 file.encrypt 吗?
- oracle - 用于 nodejs 客户端的 aws oracle rds 数据库的连接字符串
- bluetooth-lowenergy - 减少 Instant Passed (0x28) BLE 断开错误的发生
- openconnect - openconnect,ssl连接失败
- email - 我可以使用 Openssl 创建 DKIM 密钥吗
- c# - 当 SDF 文件具有允许只读的权限时,为什么我不能以只读方式打开 SQL Server CE 数据库?
- javascript - 在 ajax 响应中加载列表对象并使用此数据创建动态列表 div