【问题标题】:Is destructuring of macro parameters "really needed"?“真的需要”解构宏参数吗?
【发布时间】:2012-02-01 01:19:26
【问题描述】:

我知道在 LISP 宏参数中解构是一件好事;我想知道它是否是必要的。例如,

(defmacro m1 (a) (car a))

(defmacro m2 ((a1 a2)) a1)

似乎(大致)等效 - 除了检查参数的正确形式。

我的猜测是解构使代码更易于编写/理解,但任何使用它的代码都可能被翻译成没有的代码。我是对的还是这是一个愚蠢的初学者的错误?

【问题讨论】:

    标签: macros lisp destructuring


    【解决方案1】:

    这不是必需的。您可以让 Lisp 系统解构宏调用,也可以在宏内部为此编写自己的代码。

    如果您要编写自己的解构代码,通常会将其与 &rest 或 &body 参数列表结合使用。一个常见的原因也是宏 lambda 列表的语法可能性对于特定目的不够灵活。 Common Lisp LOOP 宏就是一个例子。

    使用宏 lambda 列表是一种很好的风格。它提供了一个带有参数和一些结构信息的接口。这也允许 Lisp 系统提供一种简单形式的宏调用语法错误检查。有些东西必须手写。

    【讨论】:

    • 谢谢,这正是我所期望的——只是想确认一下。
    猜你喜欢
    • 2014-01-20
    • 2012-02-26
    • 1970-01-01
    • 2016-11-21
    • 2011-12-13
    • 2022-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多