Я пишу функцию, которая удаляет ий элемент из списка (это происходит от Скалх 99 проблем) и был озадачена специфическим поведением это рекурсивная функция работает отличноScala: функция с внутренней рекурсивной функцией
def removeAt3(startPos:Int, inputList :List[Symbol]) = {
// will use inner recursive function
def removeAtRecursive(position:Int, lst:List[Symbol]):List[Symbol] = (position, lst) match {
case (_, Nil) => println("end of list");List[Symbol]()
case (any, h::tl) => if (any == startPos) removeAtRecursive(any + 1, tl) else h::removeAtRecursive(any+1, tl)
}
removeAtRecursive(0, inputList)
}
Но этой версии нет.
def removeAt4(startPos:Int, inputList :List[Symbol]) = {
// will use inner recursive function
def removeAtRecursive(position:Int, lst:List[Symbol]):List[Symbol] = (position, lst) match {
case (_, Nil) => println("end of list");List[Symbol]()
case (startPos, h::tl) => removeAtRecursive(position + 1, tl)
case (any, h::tl) => h::removeAtRecursive(any+1, tl)
}
removeAtRecursive(0, inputList)
}
removeAt4(3, List('a, 'b, 'c, 'd, 'e, 'f))
В самом деле Eclipse, продолжает жаловаться, что case(any, h::tl)
недостижим.
Но если я позвоню removeAt4(3, List('a, 'b, 'c, 'd, 'e, 'f))
не должен case(startPos, h::tl)
быть переведен в: case(3, h::tl)
?
спасибо большое плинтуса! – user1068378