Lisp 风格的 Erlang 中 + 和 - 运算符的数量

Arity of + and - operators in Lisp Flavored Erlang

因为我刚开始学习 LFE,所以我在阅读各章时尝试了书中的一些示例(SICP,LFE 版本)。在第 76 页的练习 1.4 中,我看到了表达式 #'+/2#'-/2

所以我进入 REPL (funcall #'+/2 1 2) 并得到(如预期的那样)3。同样 (funcall #'+/1 1) 给出 1。但是 (funcall #'+/3 1 2 3) 给出了一个错误。为什么是这样?我当然可以 (funcall #'+/2 1 (funcall #' +/2 2 3)) 但我真的很想了解 #'+/3 是否以及为什么无效,就像它看起来的那样。

最后,有点切题,如果我要实现自己的函数 FUNC,我将如何实现以这种方式接受任意数量参数的能力(函数调用 #'FUNC/arity ....)。如果您觉得这应该是一个单独的问题,请帮助我解决术语问题,因为我有点迷路了。

我也刚刚开始使用 LFE,但据我所知,it doesn't support variadic functions。这让我觉得数学运算符只接受 2 个参数。这有效的事实:(+ 1 2 3 4 5) 让我觉得上面有一个宏 运行。

LFE 宏显然 可以 根据 this thread 有任意数量的参数,尽管我还没有深入研究宏。

我的 (n00b) 建议是:如果您认为您需要可变参数函数,请尝试将列表而不是可变参数传递给您的函数。如果您仍然确实认为您需要可变参数函数,请考虑将其设为宏。

我怀疑这样的建议是合理的:避免编写宏,除非真的没有更好的选择。在我用过的每一种语言中,它们都更难分析、调试和使用,虽然它们在 LISP 中比在大多数其他语言中更好,但我认为这个建议仍然有效。