Nagyhatékonyságú Logikai Programozás, 2004 őszi félév
Információk
Ez a lap a Nagyhatékonyságú Logikai Programozás tárgy anyagára vonatkozó
információkat tartalmaz.
Konzultáció: 2005. január 25. kedd, 9:00-12:00, I.B-142.
Vizsgák:
- 2004. január 20. csütörtök, írásbeli: 10:00-13:00, szóbeli (esetleg): 12:00-15:00
- 2004. január 27. csütörtök, írásbeli: 8:00-11:00, E 505, szóbeli
(esetleg): I.B-138, 12:00-15:00
Nagy házi feladat
A házi feladat kiírása.
A házi feladat
a beadószkript (kicsomagolandó!)
segítségével küldhető be.
A január 20.-án vizsgázók január 17. 8:00-ig, a január 27.-én vizsgázók
január 24. 8:00 -ig adják be a nagy házi feladatot.
A nagy házi feladat a vizsgaidőszak végéig pótlólag is beadható.
A 2004. évi összes előadás fóliái (1.-187. oldal)
A 2002. évi előadásokról készült jegyzet-kézirat
Példaprogramok
- Programok --- az
előadáson ismertetett/ismertetendő
példaprogramok szövege (első 4 előadás).
1. kis házi feladat:
A kiírás a fóliákon (lásd fent) megtalálható, de a szóbanforgó két
oldal (PDF alakban) innen is
letölthető. A kiírás kiegészítése itt található.
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 letölthetők innen. .
Az 1. kis házi feladat beadása:
- A beadási határidő 2004 október 5., kedd, 24 óra.
- A határidőig beadott, jól működő programokra 2 pont jár.
- A házi feladat ez után a határidő után is beadható, 1 pontért.
- Ez az 1. kis házi feladat, ezért a megoldást
egy
khf-nlp1.pl
nevű állományba kell helyezni.
- A beadószkript letölthető innen (és kicsomagolandó).
- A beadószkript használatára vonatkozó leíírást (amit maga a beadószkript is
kiír) lásd itt.
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:
- Az egyes "szavak" elemei különböző számok
kell legyenek.
- Az egy kockából álló "szavak"-nak
nincs megadva az összege, tehát ez esetben is x szerepel az összeg
helyén! (Lásd pl. az alábbi tesztpéldák között a
p2
példában a mátrix 4. sorának 3. oszlopában szereplő x\x
értéket!).
A kis házi feladat tesztpéldái megtalálhatók
itt.
A 2. kis házi feladat beadása:
- Ez a 2. kis házi feladat, ezért a megoldást
egy
khf-nlp2.pl
nevű állományba kell helyezni.
- A beadási határidő 2004 november 16., kedd, 24 óra.
- A beadószkript ugyanaz, mint az 1. kisházi esetén: letölthető innen (és kicsomagolandó).
- A beadószkript használatára vonatkozó leíírást (amit maga a beadószkript is
kiír) lásd itt.
3. 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álom:
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).
A házi feladat beadása:
- Ez a 3. kis házi feladat, ezért a megoldást
egy
khf-nlp3.pl
nevű állományba kell helyezni.
Vigyázat! A megoldásban nem írhatók "közönséges",
:-
nyakjelű Prolog klózok, csak FD-klózok.
- A beadási határidő 2005. január 5., szerda, 24 óra.
- A beadószkript
4. 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ő.
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,
fd_doms([Z|List], [ZDom|ListDom])),
( call_residue( Goal, Residue) ->
( member(_-(_:max_lt(_,_)), Residue) ->
Result = active(ListDom, ZDom)
; Result = exited(ListDom, ZDom)
)
; Result = failed
).
fd_doms([V|Vs], [D|Ds]) :-
fd_dom(V, D),
fd_doms(Vs, Ds).
fd_doms([], []).
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..10000),
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:
- Az utolsó teszt hivatott azt eldönteni, hogy a megoldás használ-e
állapotot, vagy sem. Állapot nélkül ugyanis 500-szor több listaelemet
kell végignéznie...
- Az eredményben a struktúra funktora jelzi, hogy a globális korlát
lefutott-e (
exited
), vagy sem (active
). Mivel a lefutás pontos
ellenőrzése általában felesleges, ezért az active
elfogadható az exited
helyett, de nem fordítva. Például
a fentiek közül az utolsó két esetben a tesztrendszer elfogadja az
active
funktorú eredményt, de az első tesztesetben az
exited
eredményt nem.
A házi feladat beadása:
- Ez a 4. kis házi feladat, ezért a megoldást
egy
khf-nlp4.pl
nevű állományba kell helyezni.
- A beadási határidő 2005. január 5., szerda, 24 óra.
- A beadószkript
Esettanulmányok:
- Négyzetkirakás --- az
előadáson ismertetett négyzetkirakási esettanulmány.
- Torpedó
--- Az 1999-es házi-feladat (torpedó) mintamegoldása.
- Dominó ---
A 2000 tavaszi házifeladat (dominó) mintamegoldásai.
Gyakorló vizsga-feladatok:
A korábbi évek vizsga-feladat-sorai:
Sicstus licensz igényelhető az ETS-rendszerben
Az
nhlp-l levelezési lista