【发布时间】:2017-11-20 11:20:10
【问题描述】:
在解决“Scala 中的函数式编程”中发现的问题时:
实现isSorted,检查一个Array[A]是否按照给定的比较函数排序:
def isSorted[A](as: Array[A], ordered: (A,A) => Boolean): Boolean
在将我的答案与作者提供的以下解决方案进行比较时:
// Exercise 2: Implement a polymorphic function to check whether
// an `Array[A]` is sorted
def isSorted[A](as: Array[A], gt: (A,A) => Boolean): Boolean = {
@annotation.tailrec
def go(n: Int): Boolean =
if (n >= as.length-1) true
else if (gt(as(n), as(n+1))) false
else go(n+1)
go(0)
}
我对以下代码行感到困惑:else if (gt(as(n), as(n+1))) false
我认为在 Scala 中使用函数作为参数时,需要在当前函数范围之外实际定义一个单独的函数(即定义另一个函数来执行 gt 需要做的事情)?我没有看到在其他任何地方定义了gt,那么它如何能够提供Boolean 值以在isSorted 中使用?
我的假设是正确的,还是我在使用函数作为参数时完全遗漏了什么?非常感谢详细的解释。
【问题讨论】:
标签: arrays scala functional-programming