mbo*_*ork 2 lisp macros destructuring
我知道 LISP 宏参数中的解构是一件好事;我想知道这是否是必要的。举个例子,
(defmacro m1 (a) (car a))
Run Code Online (Sandbox Code Playgroud)
和
(defmacro m2 ((a1 a2)) a1)
Run Code Online (Sandbox Code Playgroud)
似乎(大致)等效 - 除了检查参数的正确形式。
我的猜测是,解构使代码更容易编写/理解,但任何使用它的代码都可能被翻译成不那么容易编写/理解的代码。我是对的还是这是一个愚蠢的初学者错误?
这不是必需的。您可以让 Lisp 系统解构宏调用,也可以在宏内部编写自己的代码。
如果您要编写自己的解构代码,通常会将其与 &rest 或 &body 参数列表结合起来。一个常见的原因也是宏 lambda 列表的语法可能性对于特定目的来说不够灵活。Common Lisp LOOP 宏就是一个例子。
使用宏 lambda 列表是一种很好的风格。它提供了一个带有参数和一些结构信息的接口。这也使得 Lisp 系统能够提供一种简单形式的宏调用语法错误检查。有些东西必须用手写。
| 归档时间: |
|
| 查看次数: |
230 次 |
| 最近记录: |