gpt4 book ai didi

list - Currying:追加两个列表

转载 作者:行者123 更新时间:2023-12-01 23:49:07 26 4
gpt4 key购买 nike

我想了解 scala 中的柯里化(Currying)。该代码采用两个列表并 append 它们。

  def append(as:List[Int],bs:List[Int]):List[Int]=as match{

case Nil=>bs
case x::xs=> x::append(xs,bs)

}

但是如果我想编写它的柯里化(Currying)版本:

def cappend(as:List[Int])(bs:List[Int])=as match{
case Nil=>bs
case x::xs=> x::cappend(xs,bs)
}

这样对吗?

最佳答案

在柯里化(Currying)中,您可以定义部分应用的函数,因此无需一次传递所有参数。在示例中,考虑以下更正,

def cappend(as:List[Int])(bs:List[Int]): List[Int] = as match {
case Nil => bs
case x::xs => x::cappend(xs)(bs)
}

也就是说,每个参数都用括号括起来(递归函数也需要返回类型,递归调用缺少前缀 c)。然后,我们定义一个部分定义的函数

val a = cappend(List(1,2)) _
a: List[Int] => List[Int] = <function1>

这会将 List(1,2) append 到作为第二个参数提供的任何 List[Int]。例如,

a(List(3,4))
res1: List[Int] = List(1, 2, 3, 4)

还要注意,我们可以有一个更通用的类型签名,不仅适用于 Int 的列表,

def cappend[T](as:List[T])(bs:List[T]): List[T]

关于list - Currying:追加两个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27482826/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com