【问题标题】:How can I define a macro in LISP with N arguments?如何在 LISP 中定义一个带有 N 个参数的宏?
【发布时间】:2020-04-16 20:42:34
【问题描述】:

我正在尝试在 LISP 中定义一个宏,例如在另一个文件中的这个调用函数

(set_name name My name is Timmy)

(set_name occupation I am a doctor )

(defmacro set_name (list)
   (print list)
)

【问题讨论】:

  • 宏应该返回要执行的新代码来代替宏调用,而不是立即执行。
  • 你能举个例子吗?对不起,我是 LISP 的新手,我只是不知道如何将这些参数传递给定义宏。
  • 为什么你认为这首先应该是一个宏,而不是一个函数?
  • 顾名思义,它应该设置变量,而不是打印一些东西。你真正想做什么?
  • 我建议你阅读第7章和第8章来了解CL的宏gigamonkeys.com/book/macros-standard-control-constructs.html

标签: lisp common-lisp


【解决方案1】:

就像在普通函数中一样,使用&rest 将所有剩余的参数收集到一个列表中。

(defmacro set_name (name &rest list) 
  `(setq ,name ',list))
(set_name occupation I am a doctor)
(print occupation)

这将打印(I AM A DOCTOR)

您需要在扩展中引用,list,这样它就不会尝试将所有符号作为变量进行评估。

【讨论】:

  • 谢谢!!
猜你喜欢
  • 2011-05-07
  • 1970-01-01
  • 2011-03-08
  • 2012-08-06
  • 1970-01-01
  • 1970-01-01
  • 2020-01-15
  • 1970-01-01
  • 2011-01-02
相关资源
最近更新 更多