【问题标题】:Using macros as functions [duplicate]使用宏作为函数[重复]
【发布时间】:2013-02-13 11:26:35
【问题描述】:

我是 Common Lisp 的新手,所以这让我有点难过,谷歌让我失望了。

我有一个函数sizzle 定义如下

(defun sizzle (f &rest r) ...blah blah...)

现在我只需要检查是否所有可选参数都不是零,所以我自然而然地做到了

(apply #'and r)

...然后事实证明and 不是一个函数,它是一个宏(我还没有考虑到)。

所以,我的问题是,有没有办法将宏用作函数(很像上面),还是我应该只创建自己的函数来检查给定列表中的所有值是否非零?或者还有其他我没有想到的方法?

【问题讨论】:

  • OP 正在询问是否可以使用宏之类的函数。 (答案是“不”。)

标签: common-lisp


【解决方案1】:

您不能将宏用作函数(这就是为什么最好让某些东西成为函数,这就是为什么使用编译器宏而不是常规宏来进行优化)。

我会使用 (every #'identity r)(notany #'null r) 而不是为您的示例编写自己的 AND 函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-23
    • 1970-01-01
    相关资源
    最近更新 更多