4. kis házi feladat (Prolog): Sátrak mátrixa

1.0 változat — $LastChangedDate: 2023-10-16 23:48:34 +0200 (Mon, 16 Oct 2023) $
Kiadás: 2023-10-16
Beadási határidő a honlapon.

A feladat

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.

A megoldandó Prolog feladat specifikációja

Írjon egy 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.

  1. Az NM bemenő paraméter egy N-M pár, ahol N ill. M a kemping, mint mátrix sorainak ill. oszlopainak a száma.
  2. Az Fs bemenő paraméter a kempingbeli 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. Feltételezheti, hogy Fs minden I-J elemére fennáll az alábbi egyenlőtlenség:

    1 ≤ I ≤ N és 1 ≤ J ≤ M (*)

  3. Az 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: west – nyugat, north – észak, east – kelet, south – 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.
  4. Az 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:

A 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 rendszerrel teszteljük.

Példá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, [2-2], [s], Mx).           no            % (sátor kint)
					       
| ?- satrak_mx(2-3, [1-1,2-2], [e,n], Mx).     no            % (sátrak egymáson)
| ?- 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

Tudnivalók a beadásról

DP Admin: dvacakrobotjaitoknakp@iit.bme.hu Vissza az elejére / Back to the top