函数在LISP中可以像在C#中一样重载吗?

函数在LISP中可以像在C#中一样重载吗?,lisp,overloading,Lisp,Overloading,我发现重载在我的C代码中非常有用。我知道它也可以用许多其他语言来实现(当然是C++语言) LISP是否允许重载或类似的功能?是的,它确实有“类似的功能”,但功能更强大: 编辑:我不知道重载的定义意味着编译时解析。谢谢Rainer Joswig。Common Lisp没有 Common Lisp不支持“重载” Common Lisp通过CLOS提供多态性,但不重载。@Vsevolod Dyomkin谢谢。。。大脑缓冲区溢出是在我考虑defmethod:)时发生的,但请注意,泛型函数执行运行时调度,

我发现重载在我的C代码中非常有用。我知道它也可以用许多其他语言来实现(当然是C++语言)

LISP是否允许重载或类似的功能?

是的,它确实有“类似的功能”,但功能更强大:

编辑:我不知道重载的定义意味着编译时解析。谢谢Rainer Joswig。

Common Lisp没有

Common Lisp不支持“重载”


Common Lisp通过CLOS提供多态性,但不重载。

@Vsevolod Dyomkin谢谢。。。大脑缓冲区溢出是在我考虑
defmethod
:)时发生的,但请注意,泛型函数执行运行时调度,而重载则在编译时解决。从语义上讲,您总是可以使用泛型函数来替换重载,但不是相反。@Svante我相信我在这里看到了一点混乱。C#也执行运行时分派,但单一:仅基于调用对象的类型,而不考虑参数的运行时类型。是的,这是通常的有限分派。我所说的不是单次分派与多次分派,而是运行时分派与编译时重载,两者有着根本的不同。我的评论是作为答案的后续,而不是您的评论。CLOS通用函数不支持“重载”。CLOS支持动态分派/多态性。重载意味着通过参数类型或参数列表差异静态选择函数。这不是用CLOS完成的。编辑了我的答案。非常感谢。