我正在编写一个函数,它将在IntList中找到最大的元素。我知道如何在Java中执行此操作,但无法理解如何在Scala中执行此操作。
我做到了,到目前为止,这就是我所拥有的,我认为应该是它。
abstract class IntList
case class Nil() extends IntList
case class Cons(h: Int, t: IntList) extends IntList
object ListFuns {
// return the maximum number in is
// return the maximum number in is
def maximum(is: IntList): Int = is match {
case Nil() => 0
case list => max(head(is), tail(is))
}
def head(l : IntList) : Int = l match {
case Nil() => 0
case Cons(e,tail) => e
}
def tail(l : IntList) : IntList = l match {
case Nil() => Nil()
case Cons(e,tail) => tail
}
def max(n : Int, l : IntList) : Int = l match {
case Nil() => n
case l => {
val h = head(l)
var champ = 0
if(n > h) {
champ = n
n
}
else{
champ = h
h
}
if(tail(l) == Nil()){
champ
}
else{
max(champ, tail(l))
}
}
}
}
答案 0 :(得分:0)
模式匹配会缩短它:
def maximum(l: IntList) : Int = l match {
case Cons(singleValue, Nil) => singleValue
case Nil() => // you decide, 0, the min value of ints, throw....
case Cons(head, tail) =>
val maxOfTail = maximum(tail)
if(maxOfTail > head) maxOfTail else head
}
小调:
head max maximum(tail)
或head.max(maximum(tail))
,无论你哪个更舒服(它们都是一样的)。 这只是一个起点,随着你的进一步了解,你会发现我的方法不是尾递归的并不太好。您可能还会考虑是否可以为空列表案例返回一个选项。另外,请注意最大值,最小值,总和,产品......的实现非常相似,并尝试将其考虑在内。