MI-PSL-6 Flashcards

You may prefer our related Brainscape-certified flashcards:
1
Q
  1. What is it a literal pattern? Write a simple example.
A

Pattern je konstrukt, který může být porovnáván vůči hodnotě.
Výraz je porovnáván vůči literálu (konstantě) a vyhoví, pokud equals.

def spell(x: Int) =
   x match {
      case 0 => "zero" // 0 is a literal pattern hear
      case 1 => "one"
      case 2 => "two"
   }
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q
  1. What happens if no matching pattern is found.
A

MatchError exception je vyhozena

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q
  1. What is it a placeholder pattern and where it is usually used?
A

Placeholder pattern je něco jako default u switche v javě. Je to wildcard, když nic jiného nematchuje. Zapisuje se podtržítkem. Volitelně je možné uvést typ, který musí hodnota splňovat.

x match {
    // ...
    case _ : Int => "an integer"
    case _ => "something else"
}
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q
  1. What is it a variable pattern?
A

Variable pattern matchuje s každým výrazem a jeho hodnotu přiřadí do dané proměnné. Název proměnné musí začínat malým písmenem. Volitelně je možné uvést typ, který musí hodnota splňovat (hodnota null neprojde).

x match {
case i : Int => “celočíselná hodnota: “ + i
case n => “hodnota je: “ + n
}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q
  1. What is it a constructor pattern?
A

Constructor pattern matchuje s case classes, které mají stejné hodnoty v konstruktoru.

x match {
    case Rect(1, 2) => "obdélník 1×2"
    case Rect(1, h) => "obdélník o šířce 1 a výšce " + h
}
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q
  1. What is it a extractor pattern?
A

Má stejnou syntaxi jako constructor pattern, na daném objektu je zavolána metoda unapply, která musí vracet buď typ Boolean (hodnota matchuje při vrácení true), nebo Option (hodnota matchuje při vrácení Some).

object Positive {
    def unapply(x : Int) : Boolean = x > 0
}
object PositiveOrNegative {
    def unapply(x : Int) : Option[String] =
            if(x > 0) Some("positive")
            else if(x  "x is positive"
    case PositiveOrNegative(result) => "x is " + result  // "x is positive" nebo "x is negative"
}
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q
  1. What is it a tuple pattern?
A

Tupple pattern se matchuje vůči Tuplen třídě. Jednoduchý příklad:

def reverse(t : (Int, Int)) =
  t match {
    case (x, y) => (y, x)
  }
 reverse(1,2)
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q
  1. Do write an example of pattern guard.
A

Pattern guard obchází nutnost mít různě pojmenované proměnné např v konstruktor patternu.

def simplify(e: Expr) = e match {
   case BinOp("+", x, y)
     if x == y => BinOp("*", x, Number(2))
   case _ => e
 }
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q
  1. What is it an infix operation pattern?
A
def printTail(l : AnyRef) {
    l match {
      case head :: tail => println("tail:" + tail)
      case _ => println("not list")
    }
  }
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q
  1. What is a difference between variable and StableId pattern?
A

U stableId patternu se porovnává matchovaná hodnota s hodnotou zadané proměnné. Tato proměnná musí začínat velkým písmenem, jinak musí být uzavřená zpětnými apostrofy:

val One = 1
val one = 1
x match {
    case One => "jednička"
    // případně
    case `one` => "jednička"
}
Naproti tomu u variable patternu vyhoví jakákoliv hodnota (volitelně omezená typem proměnné) a ta se přiřadí do zadané proměnné:

x match {
case num => “hodnota je “ + num
}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly