Haskell – úvod do jazyka Flashcards
(36 cards)
Opis Haskell
čistý (pure) funkcionálny jazyk, t.j. bez vedľajších účinkov
monadický V/V (monadic I/O) (až v 1996)
lenivé (lazy, non-strict) vyhodno. argumentov
statická typová kontrola
zaviedol triedy typov (type classes)
Opis lenive vyhodnocovanie
modulárne programovanie potrebuje dobré lepidlo
* efektívnejšie skladanie funkcií: any plist = or(map plist)
* nekonečné dátové štruktúry (nat = 1:map (+1) nat)
Ake su 2 implementacie haskellu?
Glasgow Haskell Compiler (GHC) - kompiluje do zdrojoveho kodu
Haskell User’s Gofer System (Hugs) - interpreter
Ake service pozname na balicky?
Hackage, Stack, Cabal
Ako viem vytvorit cez stack novy program?
stack new meno-projektu meno-šablóny
cim vacsinou zacina haskell file?
module Main (main) where
Co robi :t <expr>?</expr>
ukáže typ <expr></expr>
Co robi :i <name>?</name>
Zobrazi info o <name></name>
Co robi :l <module>?</module>
nahrá <module></module>
Co robi :set <option>?</option>
nastaví <option> (opak je :unset <option>)</option></option>
Co robi :p <name>?</name>
ukáže hodnotu <name> bez vynútenia vyhodnotenia</name>
Co spravi :sp <name>?</name>
zjednodušene ukáže hodnotu <name> bez vynútenia vyhodnotenia</name>
Ake su zakladne typy haskell?
data Bool = False | True
data Char≈’a’ | ’A’ | ’b’ | ’B’ |…
data [] a = [] | a : [a]
type String = [Char]
N-tice: (a,b,c)
Unit:data () = ()
Ake pozname integral typy?
- Integer: celé čísla ľubovoľnej veľkosti (aka BigInt)
- Int: celé čísla pevnej presnosti (8 bajtov)
⟨−9223372036854775808, 9223372036854775807⟩ - Word: nezáporné celé čísla pevnej presnosti (8 bajtov)
⟨0, 18446744073709551615⟩
Co je to Ratio?
a: racionálne čísla nad a (denominator (10 % 4) 2)
Ake pozname realfloat typy?
- Float: reálne čísla jednoduchá presnosť (4 bajty)
- Double: reálne čísla dvojitá presnosť (8 bajtov)
Ako zapisujeme komplexne cisla?
- import Data.Complex
- (0 :+ 1) * (0 :+ 1) (-1.0) :+ 0.0
Opis identifikatory
začínajú písmenom
môžu obsahovať písmená, cifry, podčiarkovník _ a apostrof ’
sú rozdelené do dvoch menných priestorov: premenne zacinaju malym a konstruktore velkym
identifikátor _ dont care
Ako piseme komenty?
– koment
{-koment-}
{-# direktíva #-}, napríklad zapnutie všetkých upozornení: {-# OPTIONS_GHC -Wall #-}
Ako vieme odsadzovat kod?
but len taby alebo aj {} a ; na zaciatku riadku
Aku pozname precedenciu operatorov?
Zľava asociatívne
Neasociatívne
Sprava asoc.
Co este je dolezite pri precedencii operatorov?
Priorita
Opis rezy
(# e) ≡ \x -> x # e
slide 24
Ako spravit funkciu infixovu?
(f x y)≡(x ‘f‘ y)