例如,如果我想为向量或四元数等定义新的算术运算。
我做了类似 (defun v+ (&rest vectors) ...)
的操作。
有没有什么好的方法可以重载普通的+
? (我只知道shadowing-import,好像不是什么好办法)
如果我使用+
,则需要更多时间来确定操作类型。
最好不要重载,使用不同的函数名,只在真正需要时才定义一个新函数吗?
最佳答案
你可能想要做的是定义一个包(我们称它为 my-math
),你在其中定义一个符号 my-math:+
来做任何事情 dispatch 您需要。
或者,定义 my-math:+
使其有效地 (reduce #'my-math:binary+ args)
然后定义 my-math :binary+
作为通用函数,然后您可以将特定方法卡在上面。
在编写依赖于 my-math
的包定义时,这仍然需要一些额外的纪律,因为您需要努力确保您的朴素 +
来自 my-math
,而不是 cl
,这可能会使其他人更难阅读代码。
关于math - common lisp "overloading"内置函数以便携高效的方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29834867/