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.

CelkemLF1a1b2a2b3a3b4a4b4cTL5a5b5c6a6b6c7a7b8a8b9a9b10a10bTF11a11b11c
Jiří Andras6.56.500.50.511.511.50.5
Patrik Ciklamíni9.25.53.7111110.51110.7
Lukáš Folwarczný13.77.85.911.5113.311120.9
Jan Hadrava14.69.65112122.611111
Petr Hudeček18.511.07.51111210.50.312.2111112.5
Vojtěch Hudeček19.611.28.411111.510.511.70.5111111111.4
Petr Jurčo12.45.56.9110.510.91.1111110.91
Aleš Křivák14.38.06.31111210.50.511110.32
Josefina Mádrová12.66.95.7110.5110.40.510.50.80.91111
Martin Mečiar15.396.311112111111110.50.8
Jiří Pavlovský16.09.76.3111110.50.410.90.10.90.91110.210.20.80.20.9
Photon18.210.47.81111210.50.511.4111121.8
Šimon Rozsíval13.88.55.3110.5110.90.50.50.51.611111.3
Šimon Růžička12.25.86.410.510.90.20.10.10.90.1110.50.80.20.310.51.11
Martin Strupek8.65.13.50.50.40.911.40.9110.80.7
Pavel Šmejkal20.012.67.41111.52112.111111110.510.9
Zuzana Vozárová7.56.01.51111.50.5110.5
Petr Záboj17.610.07.61111110.40.412.2111110.511.1

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