【问题标题】:scala: append List using foldRightscala:使用 foldRight 追加列表
【发布时间】:2018-10-04 20:58:30
【问题描述】:

我在研究曼宁出版的scala红皮书

List 实现是一个案例类:

case class Cons[+A](head: A, tail: List[A]) extends List[A]

foldRight 定义为:

def foldRight[A, B](as: List[A], z: B)(f: (A, B) => B): B 

并实现为

  def foldRight[A, B](as: List[A], z: B)(f: (A, B) => B): B = { // Utility functions
    as match {
      case Nil => z
      case Cons(h, t) => f(h, foldRight(t, z)(f))
    }
  }

要将一个列表附加到另一个列表,我的解决方案是:

  def append[A](l1: List[A], l2: List[A]): List[A] 
      = foldRight(l1, l2)((l1head,l2)=>Cons(l1head, l2))

但是,答案键显示以下代码:

  def append[A](l1: List[A], l2: List[A]): List[A] = foldRight(l1, l2)(Cons(_, _))

问题: (Cons(_, _))如何符合f: (A, B) => B的方法签名

【问题讨论】:

  • 谢谢,我在你的问题中找到了答案:D 这是关于如何在 Scala 中定义 foldRight

标签: scala functional-programming


【解决方案1】:

append() 的两个示例完全相同。第一个下划线是“第一个传入参数”的简写,第二个下划线是“第二个传入参数”的简写。这只是引用它们并将它们传递给 Cons 构造函数的便捷方式,而无需为每个函数命名。

另请参阅this question 的各种答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-12
    • 2016-11-05
    • 2017-03-14
    • 1970-01-01
    • 1970-01-01
    • 2020-07-31
    • 2018-02-05
    • 2013-05-03
    相关资源
    最近更新 更多