Найдите второй последний элемент в списке, объясните, пожалуйста, это решение

// But pattern matching also makes it easy.
  def penultimateRecursive[A](ls: List[A]): A = ls match {
    case h :: _ :: Nil => h
    case _ :: tail     => penultimateRecursive(tail)
    case _             => throw new NoSuchElementException
  }

Может кто-нибудь прокомментирует, что это делает построчно?

Является ли [A] универсальным, как в C #, который мы бы сделали?

h, похоже, не определен?

Я думаю, что основная часть алгоритма это рекурсивный вызов:

case _ :: tail     => penultimateRecursive(tail)

Кажется, нет проверки на 2 элемента в списке, а затем взятие 1-го элемента, чтобы получить 2-й последний, запутано!

9
задан Fred Foo 30 June 2011 в 19:43
поделиться