MI-PSL-5 Flashcards

1
Q
  1. What does it mean “higher-order function”?
A

Funkce, které přijímají funkce jako parametry nebo funkce vrací.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q
  1. Write the type of the function: def cmp(a : Int, b : Int) = a > b
A

(Int, Int) => Boolean

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q
  1. For what the function type: (Int, Int) => Boolean is shorthand?
A

Function2[Int, Int, Boolean]

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q
  1. What does it mean f(e) when f is a value?
A

volání metody f.apply(e)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q
  1. What is the form of the procedure definition?
A

Procedury nemají návratový typ, vrací typ Unit,což je obdoba void v Javě. V definici chybí návratový typ a znak rovnítka. Tělo metody musí být blok (uzavřený v {} závorkách).

def write(str: String) { println(str) }

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q
  1. What is it anonymous function? Write an example.
A

Je to výraz, který je vyhodnocen jako funkční hodnota. Často jsou využívány jako parametry high-order funkcí, příklad:

List(1,2,3).map(x=>2*x) //List(2, 4, 6)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q
  1. When and by what may be substituted formal parameters in the body of an anonymous function?
A

Můžou být vynechány typy parametrů,
pokud je pouze jeden parametr nemusí být uzavřen v závorkách
jména parametrů mohou být nahrazeny placeholderem _ (pokud je formalni parametr funkce pouzit pouze jednou) a definice odstraneny

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q
  1. How can be function converted to function value?
A

Pokud je za funkcí znak _, je funkce navrácena jako hodnota
Pokud je očekáván typ funkce, nemusí být _ uvedeno
Pokud se vynechají některé parametry funkce

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q
  1. To what is equivalent anonymous function: (x : Int) => -x
A
new Function1 [Int, Int] {
     def apply(x : Int): Int = -x
   }
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q
  1. What is it curried function?
A

Funkce, která vrací funkci a má následující syntax:

def sum(x : Int)(y : Int)(z : Int) = x + y + z
Tato funkce se pak volá:

sum(1)(2)(3)
Nemusíme ale předat všechny parametry najednou, lze předat nejdříve první parametr, výslednou funkci (vracející opět funkci) si uložit, poté předat druhý parametr, výslednou funkci si opět uložit.

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

Názvem closure se nazývá funkce společně s jejím kontextem, který poskytuje přístup k vnitřním proměnným funkce. Jelikož funkce může být převedena do funkční hodnoty, její kontext může mít kratší život než funkce samotná.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q
  1. What is it default argument?
A

Defaultní hodnota argumentu, pokud hodnota není uvedena. Přetížená metoda dědí všechny defualtní argumenty a může je předefinovat.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q
  1. What is it named argument?
A

Příklad:

def volume(a : Int, b : Int, c : Int) 
                           = a * b * c
volume(c = 5, 3, a = 2) 
Pojmenované argumenty mohou být na jakékoliv pozici a mohou být libovolně kombinovány s obyčejnými parametry.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q
  1. What is it call-by-name parameters?
A

Parametry, které nejsou vyhodnoceny při předávání, ale až při použití v těle funkce (při každém použití znovu). Označují se => ParamType, např.:

def whileLoop (cond: => Boolean)(stat: => Unit)
Tyto paramety nemůžou být val a var parametry tříd a implicitní parametry.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q
  1. What is it repeated parameter?
A

Opakovaný parametr umožňuje mít volitelné množství argumentů ve funkci, označuje se hvězdičkou za parametrem, který se může opakovat. Tento parametr musí být poslední a nesmí se vyskytovat spolu s parametry, které mají implicitní hodnotu. V těle funkce jsou pak argumenty dostupné v sekvenci, tedy typu Seq. Pokud chceme funkci zavolat se sekvencí, která má sloužit jako tyto volitelné argumenty, je třeba za sekvenci napsat rozvinutí : _*

Příklady:

def sum(args: Int*) = {
  var result = 0
  for (arg
How well did you know this?
1
Not at all
2
3
4
5
Perfectly