在斯卡拉的懒惰中折叠

时间:2017-05-28 14:30:37

标签: scala functional-programming

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

def headOptionViaFoldRight():Option[A]=foldRight(None:Option[A])((h,t)=> Some(h()))

def takeWhileViaFoldRight(f:A=>Boolean):Stream[A]=foldRight(Stream[A]())((h,t)=> Some(h))

def forAll(p:A=>Boolean):Boolean=foldRight(true)((a,b)=>p(a)&&b)

为什么没有:headOptionViaFoldRight中的第一个参数中的选项[A]?

为什么在takeWhileViaFoldRight的第一个参数中输出[A]?

为什么在forAll的第一个参数中为真?

对于在foldRight的第一个参数中使用什么感到困惑?

2 个答案:

答案 0 :(得分:1)

  

对于在foldRight的第一个参数中使用什么感到困惑?

初始值:你在空序列上得到什么。

答案 1 :(得分:1)

  

为什么在forAll的第一个参数中为真?

根据惯例和历史先例,空集合上的exists()返回false,而空集合上的forall()返回true