Vědy 4. Funkcionální jazyky a jejich vlastnosti. Lambda kalkulus, iterativní konstrukty a rekurze.

Funkcionální jazyky a jejich vlastnosti

Funkcionální jazyky

  • Haskell
  • Lisp
  • Closure
  • Scala
  • Erlang

Vlastnosti

  • Deklarativní - využíváme funkce, k popisu závislostí mezi daty, např.: y = f(x).
  • Výrazy se se vyhodnotí - výraz se nahradí hodnotou výrazu - často eager
  • Program se spouští vyhodnocením počátečního výrazu

Pure functional programming

No side effects, no mutable data
  • output of a function depends only on its inputs
  • function does not change anything in evaluation
  • can be evaluated in any order (many times, never)
More complex function based on recursion
  • no for/while cycles
  • natural problem decomposition
  • mathematical induction



Lexikální vs dynamický scope

  • Lexical scope – functions use bindings available where defined 
  • Dynamic scope – functions use bindings available where executed

Lambda kalkulus

Theory developed for studying properties of effectively computable functions
Formal basis for functional programming 
  • as Turing machines for imperative programming
Vzhledem k tomu že na ČVUTU jsme si prošili peklem tak předpokládm že javascript zlávdáme nebo to nebude problém naučit se. Toto video vysvětluje lambda calculus na javscriptu.

Iterativní konstruktory

  • Higher order functions take functions as arguments or return functions
  • Used to capture/reuse common patterns 
  • Create fundamentally new concepts 
  • Filter, apply, map, fold, swap

List

The key data structure of Lisp
S-expressions are just lists