gpt4 book ai didi

macros - 宏参数的解构是 "really needed"吗?

转载 作者:太空宇宙 更新时间:2023-11-03 18:47:02 25 4
gpt4 key购买 nike

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

(defmacro m1 (a) (car a))

(defmacro m2 ((a1 a2)) a1)

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

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

最佳答案

这不是必须的。您可以让 Lisp 系统对宏调用进行解构,也可以在宏中为此编写自己的代码。

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

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

关于macros - 宏参数的解构是 "really needed"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9089450/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com