Logikai és funkcionális programozás régi - 2015-ös - előadás oldala
Fontos:
Ez az oldal tájékoztató jellegű; a mindenkori állapot a kari CANVAS oldalon található. Kérlek onnan informálódjatok a feladatokat, határidőket, esetleges más referenciákat illetően.
Deklaratív programozási nyelvek
A programozási nyelveket fel tudjuk osztani imperatív és deklaratív nyelvekre. Az imperatív programozási nyelvek -- ilyen például a Pascal, C, Fortran -- esetében a számítógép által végrehajtott minden utasítást a programozónak kell megadnia.
A deklaratív programok esetében "magasabb szintű" programokat írunk.
Vagyis, az immár klasszikus szófordulattal élve, nem a feladat elvégzésének hogyan-jával törődünk, hanem azt programozzuk, hogy MIT
szeretnénk a programmal elvégeztetni.
Ilyen programnyelveket általános feladatokra írni nehéz. A kurzus során két programozási paradigmával ismerkedünk, melyekkel jól-definiált feladatok osztályát lehet hatékonyan megoldani - azaz programozni.
Logikai programozás
A logikai programozás esetében a programokat relációkkal specifikáljuk. A program futása az logikai következtetésen alapszik.
A logikai programozás alapjai a tények és az ezeket jellemző szabályok, melyeket együttesen tudásbázisnak nevezünk.
Programozás ebben a környezetben olyan
lekérdezések megalkotása, melyek adott felhasználói kérdésre felelnek. Például keressük azon személyeket, melyeknek
nincsenek ősei, azaz az adatbázisban nincsenek predikátum, mely szülőt rendel az illető személyhez (lásd
első feladatcsoport).
Funkcionális programozás
A funkcionális programozásban minden entitás függvény. A program legfőbb jellemzője, hogy nincsenek benne változók - ez nagyon megkönnyíti az illető programozási nyelven írt programok helyességének a bizonyítását illetve megkönnyíti azt, hogy modulokból bizonyítottan helyes programokat rakjunk össze.
A funkcionális programozás alaptulajdonsága, hogy minden entitás függvény. Tehát egy programban előforduló konstansok is zéró-változós függvényként léteznek a Clean-en belül.
Mivel a funkcionális nyelven írt programok rendkívül megbízhatóak, a nagy kockázatú rendszereknél (pl. a párizsi metró irányító rendszerénél)
használják nagy előszeretettel.
A kurzus során a funkcionális programozás főbb jellemzőit ismertetjük -
Horváth Zoltán jegyzeteire alapozva. Hangsúlyt helyezünk a hatékony programkódok írására, az algoritmika és a logikai struktúra érvényesítésére, melynek eredménye egy jobb minőségű kód, mely az aktuális programozási nyelvtől független.
Az előadások során írt rövidebb függvények, illetve egy korábbi feladatlap megtalálható alább:
Fontos: Ez az oldal tájékoztató jellegű; a mindenkori állapot a kari CANVAS oldalon található. Kérlek onnan informálódjatok a feladatokat, határidőket, esetleges más referenciákat illetően.
A feladatok programozásánál igyekezzünk
tiszta és érthető
komment-eket írni és értelmezhető neveket adni a predikátumoknak. Egy
angol nyelvű útmutatót írt
Michael Covington, a
PDF formátum letölthető:
PDF
-
Logikai laborfeladatok:
-
Funkcionális feladatok:
Fontos: Ez az oldal tájékoztató jellegű; a mindenkori állapot a kari CANVAS oldalon található. Kérlek onnan informálódjatok a feladatokat, határidőket, esetleges más referenciákat illetően.
A jegy a laborgyakorlatok és félév-végi laborvizsga eredménye.
A végső jegy:
-
laborfeladatokból (50%) és
-
félév-végi laborvizsgából (50%-a) áll.
A vizsgán való megjelenés feltétele a laborfeladatok leadása - ezek
alatt a logikai és funkcionális feladatcsoportok leadását értem: mindegyik feladatcsoportból 60
százalékot.
- Logikai programozás
Az SWI-prolog kompilátor és interpreter. A program honlapja: http://www.swi-prolog.org.
Install-programok:
Hasznos file-ok:
-
Hasznos editor Windows alá a beépített emacs szerkesztő, melyet a prolog-ból tudunk hívni.
-
A linux alatt az (X)emacs használható editornak, a prolog.el file-al indíthatjuk a
programot prolog módban.
- Funkcionális programozás
A Clean funkcionális programozási nyelv a hollandiai Nijmegen
egyetem fejlesztése. A program honlapja: CLEAN. Install-programok:
Levélcím: Lehel _dot_ Csato _at_ cs _dot_ ubbcluj _dot_ ro
Program = adatstruktúra + algoritmus