允许为不同的参数值分别实现功能的功能的名称是啥?

Posted

技术标签:

【中文标题】允许为不同的参数值分别实现功能的功能的名称是啥?【英文标题】:What is the name of feature that allows separate function implementations for different values of parameters?允许为不同的参数值分别实现功能的功能的名称是什么? 【发布时间】:2019-12-06 03:08:59 【问题描述】:

在某些编程语言中,可以为特定的参数值指定函数实现:

factorial[x] = x * factorial[x-1]
factorial[0] = 1

使用0 调用函数将使用第二个定义,而使用3 调用函数将使用第一个定义。

我知道这是一种函数重载,但是如果我要搜索具有函数重载的语言,我会发现很多没有此功能但仅根据数量或类型进行重载的语言。有没有更具体的名称?

【问题讨论】:

C++ 模板有这个类型的概念。可以为特定类型提供模板的不同实现。这些实现称为specializations。见partial template specialization。 【参考方案1】:

这样的case-by-case functions在数学上被称为piecewise functions。例如,在 Scala 中,它们可以使用 case 这样的语句来实现

val factorial: Int => Int = 
  case 0 => 1
  case x => x * factorial(x - 1)

哪个输出

factorial(4) // res1: Int = 24

这是一种使用pattern matching的函数定义形式。

类似地,在 Haskell 中,我们可以像这样使用模式匹配来定义一个函数

factorial :: Integer -> Integer 
factorial 0 = 1
factorial x = x * factorial (x - 1)

【讨论】:

以上是关于允许为不同的参数值分别实现功能的功能的名称是啥?的主要内容,如果未能解决你的问题,请参考以下文章

易语言里的发送信息命令里的信息值,参数1,参数2分别是啥意思。代表啥,决定的是啥?

c语言中形参和实参的区别是啥?

days04--方法(函数)

VLAN功能是啥?

java-方法重载

java中的方法重载