:- use_module(library(lists), [nth/4]). % `nth(?N, ?LIST, ?ELEMENT, ?REST)' % ELEMENT is in position N in the LIST and REST is all elements in % LIST except ELEMENT. % satrak(+Leiro, -SatorHelyek): A Leiro által meghatározott sátor-feladvány % megoldása a SatorHelyek égtájlista. % ******** Csak egyetlen fát tartalmazó kert esetére működik ********* satrak(satrak(Sorosszegek, Oszloposszegek, [FaS-FaO]), SatorHelyek) :- length(Sorosszegek, SorokSzama), length(Oszloposszegek, OszlopokSzama), szomszed(Egtaj, Sorkulonbseg, Oszlopkulonbseg), SatorS is FaS + Sorkulonbseg, SatorO is FaO + Oszlopkulonbseg, 1 =< SatorS, SatorS =< SorokSzama, 1 =< SatorO, SatorO =< OszlopokSzama, nth(SatorS, Sorosszegek, SatorSOssz, TobbiSorOsszeg), abs(SatorSOssz) =:= 1, nth(SatorO, Oszloposszegek, SatorOOssz, TobbiOszlopOsszeg), abs(SatorOOssz) =:= 1, csupa_nem_poz(TobbiSorOsszeg), csupa_nem_poz(TobbiOszlopOsszeg), SatorHelyek = [Egtaj]. % szomszed(Egtaj, Sorkulonbseg, Oszlopkulonbseg): Az Egtajnak megfelelő % szomszéd sorszáma Sorkulonbseg-gel, oszlopszáma Oszlopkulonbseg-gel nagyobb % mint az eredeti mező sor- ill. oszlopszáma. szomszed(n, -1, 0). szomszed(w, 0, -1). szomszed(s, 1, 0). szomszed(e, 0, 1). % csupa_nem_poz(L): Az L számlista minden eleme nem-pozitív. csupa_nem_poz([]). csupa_nem_poz([X|L]) :- X =< 0, csupa_nem_poz(L). % Futási példa: % % | ?- satrak(satrak([0,-1,-1], [0,-1,-1,0], [2-2]), S). % % S = [s] ? ; % % S = [e] ? ; % % no % | ?-