Ez a leírás a Deklaratív programozás c. tárgyból kiadott 4., Prolog nyelven megirandó kis házi feladatot ismerteti, amely a Prolog nagy házi feladathoz kapcsolódik, de itt most önállóan, a nagy házi feladattól függetlenül ismertetjük.
Megjegyzés: ez a feladat lényegében megegyezik a 3. funkcionális programozási kis házi feladattal.
satrak_mx(NM, Fs, Ss, Mx)
Prolog-eljárást, amely
előállítja a sátrak helyzetét leíró mátrixot!
A eljárásnak három bemenő és egy kimenő paramétere van.
NM
bemenő paraméter egy N-M
pár,
ahol N
ill. M
a kert, mint mátrix sorainak ill.
oszlopainak a száma.Fs
bemenő paraméter a kertbeli fák helyét írja
le I-J
alakú számpárokból álló f hosszúságú
lista formájában, ahol I
ill. J
az adott fa
sorának ill. oszlopának sorszáma:
1 ≤ I ≤ N
és 1 ≤ J ≤ M
(*)
Ss
bemenő paraméter, minden egyes fához megadja a
hozzá tartozó sátor relatív helyét egy olyan f hosszúságú
lista formájában, amelynek minden eleme
a w
, n
, e
, s
atomok egyike. Ezek az atomok az égtájak angol nevének
kezdőbetűi: w
est –
nyugat, n
orth – észak, e
ast –
kelet, s
outh – dél. Az Ss
lista l-edik eleme azt írja elő, hogy az Fs
lista l-edik eleme által meghatározott fához képest melyik
oldalszomszéd parcellára kell a fához tartozó sátrat helyezni.
Mx
kimenő paraméter a sátrak helyét leíró,
N
sorból és M
oszlopból álló mátrix, amelyben a
sátrak helyén az 1
egész szám áll, a többi helyen pedig a 0
.
A satrak_mx(NM, Fs, Ss, Mx)
eljáráshívás végrehajtása:
Fs
listának van olyan I-J
eleme,
amely a mátrixon kívülre mutat, azaz nem teljesül rá a
fenti (*) feltétel, lásd az alábbi
példák közt a (meghiúsulás 1)
tesztesetet;I-J
pozíciója a mátrixon kívül van, azaz
nem teljesül rá a fenti (*) feltétel,
lásd az alábbi példák közt a (meghiúsulás 2)
tesztesetet;(meghiúsulás 3)
tesztesetet.Mx
kimenő paraméterrel. satrak_mx/4
eljárás paramétereinek típusát a következő – megjegyzésként
megadott – Prolog-típusdefiníciók írják le.
% :- type parcMutató == int-int. % egy parcella helyét meghatározó egészszám-pár % :- type fák == list(parcMutató). % a fák helyeit tartalmazó lista % :- type irány ---> n % észak % ; e % kelet % ; s % dél % ; w. % nyugat % :- type sHelyek == list(irany). % a fákhoz tartozó sátrak irányát megadó lista % :- type bool == int % csak 0 vagy 1 lehet % :- type boolMx == list(list(bool)). % a sátrak helyét leíró 0-1 mátrix % :- pred satrak_mx(parcMutató::in, % NM % fák::in, % Fs % sHelyek::in, % Ss % boolMx::out). % Mx
A beadott programokat Linux környezetben a SICStus Prolog 4.7.0 rendszerrel teszteljük.
| ?- satrak_mx(2-3, [2-2], [n], Mx). Mx = [[0,1,0],[0,0,0]] ? ; no
| ?- satrak_mx(2-3, [2-2], [e], Mx). Mx = [[0,0,0],[0,0,1]] ? ; no
| ?- satrak_mx(2-3, [3-2], [n], Mx). no % (meghiúsulás 1)
| ?- satrak_mx(2-3, [2-2], [s], Mx). no % (meghiúsulás 2)
| ?- satrak_mx(2-3, [1-1,2-2], [e,n], Mx). no % (meghiúsulás 3)
| ?- satrak_mx(4-5, [2-4,1-5,3-2], [s,w,w], Mx). Mx = [[0,0,0,1,0], [0,0,0,0,0], [1,0,0,1,0], [0,0,0,0,0]] ? ; no
| ?- satrak_mx(6-6, [1-3,1-5,3-1,4-6,5-1,5-4,6-5], [s,e,n,w,e,s,e], Mx). Mx = [[0,0,0,0,0,1], [1,0,1,0,0,0], [0,0,0,0,0,0], [0,0,0,0,1,0], [0,1,0,0,0,0], [0,0,0,1,0,1]] ? ; no
DP Admin: dvacakrobotjaitoknakp@iit.bme.hu | Vissza az elejére / Back to the top |