У меня есть следующая программа, которая содержит рекурсивный fucntion с сопоставлением с образцом. Этот код работаетscala pattern matching dilemma
def randomSelect(num:Int, lst:List[Symbol]):List[Symbol] = (num, lst) match{
/** traveerse list recursively extracting randomelemnents
*
*/
case (n, l) => {
if (n>0) {
println("At " + n + " we got:" + l)
val rnd = getRandom(l.length)
val item = l(rnd)
lst(rnd) :: randomSelect(n - 1, l.filter(it => it != item))
} else List[Symbol]()
}
}
а в следующем не. И я не могу понять, почему
def randomSelect(num:Int, lst:List[Symbol]):List[Symbol] = (num, lst) match{
/** traveerse list recursively extracting randomelements
*
*/
case (n, mylist) => {
val rnd = getRandom(mylist.length)
val item = mylist(rnd)
lst(rnd) :: randomSelect(n - 1, mylist.filter(it => it != item))
}
case (0, mylist) => List[Symbol]()
}
во втором Conde сниппета, случай (0, MyList) никогда не вызывается.
что мне не хватает?
вид касается марко
Первый случай всегда будет соответствовать, переместите второй случай перед ним. – Lee