1 / 16

Funkcionális programozás 2. gyakorlat

Funkcionális programozás 2. gyakorlat. 2011.02.15. Batha Dorián. Elérhetőség. Batha Dorián E-mail: batha.dorian.elte@gmail.com Tárgy: [fpgyak]_<gyakorlat_száma> Anyagok: kacsi3.web.elte.hu Feladatok beadása: https://pnyf.inf.elte.hu/bead/. Általános tudnivalók.

bevis
Télécharger la présentation

Funkcionális programozás 2. gyakorlat

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Funkcionális programozás2. gyakorlat 2011.02.15. Batha Dorián

  2. Elérhetőség • Batha Dorián • E-mail: batha.dorian.elte@gmail.com • Tárgy: [fpgyak]_<gyakorlat_száma> • Anyagok: kacsi3.web.elte.hu • Feladatok beadása: https://pnyf.inf.elte.hu/bead/

  3. Általános tudnivalók • +/- feladatok: min. 8 leadása, végén +-ban kell lenni • Kisbeadandók: hetente; 8 jó megoldás kell(lesznek szorgalmik is) • Nagybeadandó: 1 db lesz (szükséges feltétele a zh-nak) • Csoport zh: 1 db lesz a félévben

  4. BSc 1. évesek: 1 db jegy (5 kredit) • Gyakorlat kötelező • Jegy: csoport zh és a vizsga zh átlaga • BSc 3. évesek: 1 v 2 db jegy (2 v 2+2 kredit) • Gyakorlat opcionális • Gyakorlat: csoport zh • Kollokvium: félév végén géptermi zh

  5. Bevezetés – a Haskell • A félév tananyaga:Haskell nyelv alapjainak megismerése • Funkcionális nyelv • Erősen típusos • Lusta kiértékelésű

  6. Programozási környezet • Ajánlott: Linux Shell + ghci • GHC: Glasgow Haskell Compiler • Fordító: a megadott modulban definiált main nevű akcióból futtatható programot készít • GHCi: • Interpreter: modulok betöltése; kifejezés kiértékelése; akció végrehajtása • Próbáljuk ki! (Verzió > 6.8 ?)

  7. Az interpreter parancsai Elindítás: ghciparanccsal Parancssor elején: betöltött modul(ok)Kezdetben alapértelmezés: Prelude> Modul betöltése: :l modulnév vagy fájlnév Legutóbb betöltött modul újratöltése: :r Kifejezés kiértékelése vagy akció végrehajtása: írjuk be a kifejezést vagy akciót, aztán enter.Többsoros kifejezés nincs -> modul késíztése Kilépés: :q vagy Ctrl+d (csak Linuxban) Fel és le nyilak: előzőleg begépelt parancsok Tab: parancsok és függvénynevek kiegészítése

  8. Órai anyag mentése • script mentes.txt (Script started, file is mentes.txt) • exit (Script done, file is mentes.txt) • Megjegyzések: - A scriptet a ghci indítása előtt indítsuk el - A mentes.txt tartalma a "Script started" és "Script done" közti rész lesz. - A script-ből kilépés Ctrl+d is lehet exit helyett

  9. Lexikális elemek • Megjegyzések • Egysoros: -- • Többsoros: {- megjegyzés -}. Egymásba ágyazhatók. • Literálok • Egész számok: 1, 5, 119 • Tizedestörtek: 1.1, 0.45, 3e10, 1.3e-10 • Hexadecimális számok: 0xABCD, 0xabcd, 0XabCD • Oktális számok: 0o776, 0O11 • Karakterek: ‘a’, ‘ű’, ‘\n’, ‘\t’ • Szövegek: ”alma” (karakterek listája)

  10. Operátorok – kötési erősségek • Operátor Kötés ^, ^^, ** (.(.)) *, / ((.).) +, - ((.).) ==, /=, <, <=, >, >= - && (.(.)) || (.(.))

  11. Hatványozás • Hatványozás nemnegatív kitevővel: 2 ^ 3 • Hatványozás egész kitevővel: 2 ^^ (-3) • Hatványozás valós kitevővel: 2 ** 0.5 • A hatványozás jobbra köt, ellentétben a négy elemi művelettel!

  12. Gyökvonás, negálás • Gyökvonás • sqrt 2 • Negálás • Az egyetlen prefix operátor • Precedenciája, kötése megegyezik a kivonáséval • - 6 - 2 zárójelezése (-6) - 2 • - 6 ^ 2 zárójelezése -(6 ^ 2) • Hibás kifejezés: 3 + -11; helyesen: 3 + (-11)

  13. További műveletek • A függvényeket `` jel közé téve infix operátorként is használhatjuk. • div (quot) - maradékos osztás • mod (rem) - maradékképzés • Az infix módon használt ‘div‘ és ‘mod‘ kötési erőssége ugyanaz, mint a ‘*‘ és ‘/‘ operátoroké

  14. Listák • Üres lista: [ ] • Elemek felsorolásával: • [1,3,8,6] • [‘a’, ‘x’] • [True,False,True] • Pont-pont kifejezéssel: • [1..4] -> [1,2,3,4] • [2,4..11] -> [2,4,6,8,10] • [0..] -> a természetes számok (végtelen lista) • [1,3..] -> a páratlan számok (végtelen lista)

  15. Alapvető függvények • lenght [1..10] = 10 • [1..10] !! 0 = 1 • „he” ++ „llo” = „hello” • sum [1..10] = 1 + 2 + ... + 10 • product [1..10] = 1 * 2 * ... * 10

  16. Halmazkifejezés • Matematikai példakép: { n^2^ | n ∈ N, n páros } • Haskellben: [ n^2 | n <- [1..], n `mod` 2 == 0 ] • Tetszőlegesen sok generátor és feltétel. • A halmazokkal ellentétben az elemekből több is lehet és számít a sorrend. • A generátorokkal bevezetett új változók csak a generátortól jobbra láthatóak, tehát a következő hibás: [ n^2 | n `mod` 2 == 0, n <- [1..] ]

More Related