Neprocedurální programování – letní semestr 2013/2014

Cvičení, pondělí 15.40

Požadavky na zápočet

Na každém cvičení budou zadány domácí úkoly za alespoň 2 body, s výjimkou dvou, na nichž bude (spíše orientační) písemka, za kterou bude možné získat také alespoň 2 body.

Domácí úkoly

Odevzdávejte buď e-mailem na adresu roman.smrz@seznam.cz nebo papírově na cvičení. Deadline je vždy do začátku cvičení v příslušný den.

19. 5. 2014, deadline 30. 6. 2014 24.00

12. 5. 2014

Dnes byla na řadě druhá písemka.

5. 5. 2014, deadline 12. 5. 2014 15.40

28. 4. 2014, deadline 5. 5. 2014 15.40

Pro inspiraci možné (ne příliš efektivní) řešení pro vygenerování seznamu prvočísel pro úkol z konce cvičení:

primes = sieve $ numbers 2
    where sieve (x:xs) = x : filter (\y -> y `mod` x /= 0) (sieve xs)
          numbers n = n : numbers (n+1)

(Pozn.: místo numbers 2 je možné použít výraz [2..], ale podle slidů budou tyto výrazy na přednášce až později; nicméně kdo je zná, při řešení úkolů je samozřejmě použít může.)

14. 4. 2014, deadline 28. 4. 2014 15.40

7. 4. 2014, deadline 14. 4. 2014 15.40

31. 3. 2014, deadline 7. 4. 2014 15.40

Dnes jsme cvičení věnovali úvodu do lambda kalkulu, na němž jsou založeny funkcionální programovací jazyky. V rámci cvičení jsme používali tuto reprezentaci logických hodnot:

true = λx. λy. x
false = λx. λy. y

A následující numerály pro reprezentaci přirozených čísel:

0 ≈ λf. λx. x
1 ≈ λf. λx. f x
2 ≈ λf. λx. f (f x)
...
n ≈ λf. λx. fn x

Lambda kalkul je matematický nástroj, takže na řešení příkladů může stačit tužka a papír, nicméně chcete-li zkoušet příklady na počítači a máte k dispozici Haskell, můžete si stáhnout pomocný skript a přidávat definice do něj; syntaxe víceméně odpovídá té matematické, jen se místo „λ“ používá „\“ a místo „.“ je „->“ (viz příklady uvnitř). Jelikož Haskell neumí přímo zobrazit lambda termy, jsou tam pomocné funkce showBool a showNum na zobrazení logické hodnoty, respektive numerálu, dále definice true, false a funkce num pro generování numerálu z předaného čísla. S nainstalovaným kompilátorem GHC můžete v Linuxu načíst skript následujícím příkazem (S Windows či MacOS bohužel nemám zkušenosti, leda sem můžu přidat instrukce, pokud by mi je někdo poslal):

ghci lambda.hs

A zadávat výrazy k vyhodnocení (výsledek je potřeba obalit příslušnou pomocnou funkcí):

> showBool (and true false)
False
> showNum (plus (num 10) (num 5))
15

Jen upozorňuji, že Haskell používá typovaný lambda kalkul, ve kterém nejsou povolené všechny výrazy netypovaného kalkulu, například (λx.xx)(λx.xx), ale řešení příkladů by fungovat mělo (Poznámka: alespoň pro 6a a 6b, dostal jsem jedno řesení 6c, které otypovat nejde).

24. 3. 2014, deadline 31. 3. 2014 15.40

17. 3. 2014

Dnes jsme psali písemku, domácí úkoly nejsou.

10. 3. 1014, deadline 17. 3. 2014 15.40

3. 3. 2014, deadline 10. 3. 2014 15.40

24. 2. 2014, deadline 3. 3. 2014 15.40

17. 2. 2014, deadline 24. 2. 2014 15.40

Máte k dispozici databázi s predikáty ze cvičení rodic(Rodic,Potomek), manzele(Manzel,Manzelka), muz(Kdo) a zena(Kdo).