Nagyhatékonyságú Deklaratív Programozás Labor, 2021 tavaszi félév


Információk

Ez a lap a Nagyhatékonyságú Deklaratív Programozás Labor tárgy anyagára vonatkozó információkat tartalmaz.

Friss hírek


Az előadások fóliái

Változások még lehetségesek.


Az előadások videófelvételei

A felvételek megtalálhatók itt,


A 2002. évi előadásokról készült jegyzet-kézirat


Példaprogramok


Házi feladatok

A házi feladatok beadásához be kell jelentkezni az NDP ETS rendszerébe. Ezután "HF beadás" menűpont alatt lehet az adott házi feladatot beadni.


1. kis házi feladat:

A kiírás innen letölthető. A kiírás kiegészítéseként pontosítjuk a count/2 predikátummal szembeni elvárásokat:

  1. ne csináljon választási pontot (lásd a 4. futási példát a fólián).
  2. count(L, N)-ben, ha az L lista N db eleméről kiderül, hogy 1-es, akkor nem vár további változó-behelyettesítésre és a fennmaradó változókat behelyettesíti 0-ra. Pl. a `count([X,Y,Z], 1), Z=1' célsorozat az `X=0, Y=0, Z=1' eredményt adja.
  3. count(L, N)-ben, ha az L lista len(L)-N db eleméről kiderül, hogy 0, akkor nem vár további változó-behelyettesítésre és a fennmaradó változókat behelyettesíti 1-re. Pl. a `count([X,Y,Z], 2), Z=0' célsorozat az `X=1, Y=1, Z=0' eredményt adja.

A kis házi feladat "minta"-megvalósítása (.po formában, tehát futtathatóan, de nem olvashatóan) és tesztpéldái az első három előadás példaprogramjaival együtt letölthetőek innen.

Az 1. kis házi feladat beadása:

A KHF az NDP ETS rendszerének segítségével adható be.

A beadási határidő 2021. március 8, hétfő, 23:59.
A határidőig beadott, jól működő programokra 2 pluszpont jár.
A házi feladat ez után a határidő után is beadható, 1 pluszpontért.


2. kis házi feladat:

A kiírás a fóliákon megtalálható, de a szóbanforgó egy oldal (PDF alakban) innen is letölthető.

Fontos megjegyzesek:

A kis házi feladat tesztpéldái megtalálhatók itt.

A 2. kis házi feladat beadása:

A KHF az NDP ETS rendszerének segítségével adható be.

A beadási határidő 2021. április 6. kedd, 23:59.
A határidőig beadott, jól működő programokra 2 pluszpont jár.
A házi feladat a határidő után is beadható, 1 pluszpontért.


3. kis házi feladat:

A CLPFD gyakorló feladatsor megoldása nlp3.pl néven beadható az ETS-ben.

A beadási határidő 2021. április 19, hétfő, 23:59.

A határidőig beadott, minden tesztesetet teljesítő programokra 2 pluszpont jár.
A házi feladat ez után a határidő után is beadható, 1 pluszpontért.


4. kis házi feladat:

A KHF az NDP ETS rendszerének segítségével adható be.

A kiírás a fóliákon megtalálható, de a szóbanforgó egy oldal (PDF alakban) innen is letölthető.

A kis házi feladat futtatásakor a következő környezetet használom:

:- use_module(library(lists)). :- assert(clpfd:full_answer). globtest(Before, Constraint, After, Result) :- Constraint = max_lt(List, Z), Goal = (Before, Constraint, After, maplist(fd_dom, [Z|List], [ZDom|ListDom])), ( call_residue_vars( Goal, Vars) -> ( is_active(max_lt(_,_), Vars) -> Result = active(ListDom, ZDom) ; Result = exited(ListDom, ZDom) ) ; Result = failed ). is_active(Goal, Vars) :- member(Var, Vars), frozen(Var, VarF), in_goal(VarF, Goal). in_goal(_:Gs, G) :- !, in_goal(Gs, G). in_goal((Gs1,Gs2), G) :- !, ( in_goal(Gs1, G) -> true ; in_goal(Gs2, G) ). in_goal(G, G). step_up(X, _I) :- nonvar(X), !. step_up(X, I) :- X #> I, I1 is I+1, step_up(X, I1). Példafutások: | ?- globtest(true, max_lt([A,B,C],Z), (A in 1..5, B #> 2, Z in 0..6), Result). Result = active([1..5,3..5,inf..5],4..6) ? ; no | ?- globtest(domain([X,Y,Z], 0, 9), max_lt([X,Y],Z), (Z=5, Y=6), Result). Result = failed ? ; no | ?- globtest(true, max_lt([A],Z), (A in {0,9}, Z in {3,6}), Result). A = 0, Result = exited([{0}],{3}\/{6}) ? ; no | ?- globtest((length(L, 500),domain(L, 1, 5) , X in 5..50000), max_lt([X|L], Z), step_up(X, 5), Result). L = [_A,_B,_C,_D,_E,_F,_G,_H,_I,_J|...], X = 10000, Result = exited([{10000},1..5,1..5,1..5,1..5,1..5,1..5,1..5,... .. ...|...],10001..sup) ? ; no | ?- Megjegyzések:

A 4. kis házi feladat beadása:

A KHF az NDP ETS rendszerének segítségével adható be.


5. kis házi feladat:

Az FD predikátumok jelentését ellenőrző segédprogram letölthető innen.

A kiírás a fóliákon megtalálható, de a szóbanforgó egy oldal (PDF alakban) innen is letölthető.

A kis házi feladat futtatásakor a következő segédeljárást használjuk:

fdtest([X,Y,Z,B], Goal, [XR,YR,ZR,BR]) :- domain([X,Y,Z], 0, 9), 'z>max(x,y)'(X, Y, Z) #<=> B, call(Goal), fd_dom(X, XR), fd_dom(Y, YR), fd_dom(Z, ZR), fd_dom(B, BR).

Az 5. kis házi feladat beadása:

A KHF az NDP ETS rendszerének segítségével adható be.


Nagy házi feladat

A házi feladat kiírása.

A beadási határidő: 2021. május 14. péntek, 23:59.

A házi feladat keretprogramja tesztesetekkel együtt letölthető a tgz archivumból.

A beadáskor használt tesztesetek rendre a következő sorszámmal szerepelnek a fenti tgz file tests könyvtárában: 077 078 079 178 247 256 246 260 147 290.

A nagyházi pontozása: 10 teszteset van. Minden helyesen lefutó teszteset 1 pontot ér. A dokumentációra további 5 pont kapható. A nagyházi elfogadásához a maximálisan elérhető pontszám 40%-át kell teljesíteni, mind a tesztesetek, mind a dokumentáció esetében. Tehát minimálisan 4 tesztesetet kell teljesíteni, és a dokumentációnak is legalább 2 pont értékűnek kell lennie.


Beszámoló:

Pontozás:

Régebbi beszámolók (vizsgák) feladatsorai:

Egy közelmúltbeli beszámoló feladatsora: beszámoló-minta, megoldás.

A feladatsor hasonló lesz ehhez a beszámoló-mintához. Öt feladat lesz:


Tájékoztatás a 2021. május 17-i beszámolóról

A beszámoló feladatsora 13:30-tól letölthető innen.

Május 17-én, hétfőn 13:30-kor órakor felrakjuk a honlapra a beszámoló feladatsorát. A feladatok beadását 18 óráig be kell fejeznetek.

A feladatok megoldását az ETS-ben kell majd beadni. Az 1.-4. feladatok tesztelése - a házi feladatokhoz hasonlóan - automatikusan történik, az eredményről néhány percen belül emailt kaptok. Az 5. feladatot a tanárok ellenőrzik. (Az 1. feladatban kért szöveges részeket értelemszerűen kommentként kell elhelyezni a kódban.)

Azt kérjük, hogy mihelyst elkészültetek egy feladat megoldásával, töltsétek fel azt az ETS-be. Ezáltal egyrészt visszajelzést kaptok az esetleges hibákról, másrészt a javító tanárok interaktívan tudnak segíteni abban, hogy minél jobb megoldást adjatok be.

A tesztek sikeres lefutása nem jelent automatikusan maximális pontszámot - a megoldásokat ellenőrizni fogjuk, és szükség esetén Teams-en vagy más online felületen megbeszéljük a problémákat. Ezután új, javított megoldást lehet beadni.

A fentiekre való tekintettel kérjük, hogy legyetek elérhetők a Teams-en keresztül.

A feladatok megoldásához a jegyzet, a diák, a SICStus kézikönyv szabadon használható, viszont nem szabad egymással érintkeznetek.

A tanárok elérhetők lesznek a Teams-en, illetve egy nemrégiben kifejlesztett DP helpdesk (csak a beszámoló ideje alatt használható) szolgáltatáson keresztül. Ezek segítségével a tanár-diák páros privát beszélgetést tud folytatni. Egy ilyen beszélgetést főleg akkor érdemes kezdeményeznetek, ha már legalább egy részleges megoldást elkészítettetek. A megbeszélésért alaphelyzetben nem vonunk le pontokat, csak ha komolyabb ötlettel segítünk, de erre csak akkor kerül sor, ha a levonásba beleegyeztek.


Az nhlp-l levelezési lista


A rokon tárgyakról, korábbi félévekről Szeredi Péter oktatási honlapján található információ.