В чем разница между восходящим и нисходящим способом?

Подход восходящий (к динамическому программированию) заключается в том, чтобы сначала рассмотреть «меньшие» подзадачи, а затем решить более крупные подзадачи, используя решение меньших проблем. .

сверху вниз заключается в решении задачи в " 2) совпадение {| case Some (Some (a), b) => a | case e => e | } 2) совпадение {| case Some (Some (a), b) => a | case e => e | } <...

Кажется, что вложенное сопоставление не работает, что является странным ограничением.

Ниже приводится пример поведения:

Some(Some(1),2) match {
 | case Some(Some(a),b) => a
 | case e => e
 | }
<console>:9: error: wrong number of arguments for <none>: (x: (Some[Int], Int))Some[(Some[Int], Int)]
   case Some(Some(a),b) => a
            ^
<console>:9: error: not found: value a
   case Some(Some(a),b) => a
                           ^

Это работает:

Some(Some(1),2) match {
case Some(a) => a match {
case (Some(a),b) => "yay"
case e => "nay"
}
}

Я просто тупица или есть лучший способ добиться этого?

6
задан tshepang 7 March 2014 в 19:20
поделиться