MI-PSL-5 Flashcards Preview

FIT 4 - semestr > MI-PSL-5 > Flashcards

Flashcards in MI-PSL-5 Deck (15)
Loading flashcards...
1
Q
  1. What does it mean “higher-order function”?
A

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

2
Q
  1. Write the type of the function: def cmp(a : Int, b : Int) = a > b
A

(Int, Int) => Boolean

3
Q
  1. For what the function type: (Int, Int) => Boolean is shorthand?
A

Function2[Int, Int, Boolean]

4
Q
  1. What does it mean f(e) when f is a value?
A

volání metody f.apply(e)

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) }

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)

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

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

9
Q
  1. To what is equivalent anonymous function: (x : Int) => -x
A
new Function1 [Int, Int] {
     def apply(x : Int): Int = -x
   }
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.

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á.

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.

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.
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.
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