Generalizacija procedur
Iz E-študij, proste zakladnice študentskega znanja
Pri problemu dostikrat velja poskusiti rešiti splošnejši problem od danega problema. Potem je rešitev danega problema samo poseben primer dobljene rešitve. Problem ponavadi posplošimo tako, da konstante spremenimo v spremenljivke. Proceduro posplošimo z dodajanjem novih argumentov. Konstante, ki nastopajo v proceduri, spremenimo v vhodne argumente procedure.
isci(Mesto):- drzava(brazilija,Mesta), element(Mesto,Mesta), mesto(Mesto,St_preb), St_preb > 1000. %število preb je podano v tisočih
isci(Drzava,Mesto,Min) :- drzava(Drzava,Mesta), element(Mesto,Mesta), mesto(Mesto,St_preb), St_preb > Min.
Problem osmih dam na šahovnici
- Reši problem N-1 dam na šahovnici.
- Dodaj eno damo tako, da nobene od prejšnjih N-1 dam ne napada.
Mejni primer z 0 damami je trivialen. Gornjo idejo lahko direktno zapišemo v prologu:
dame([],0).% prvi argument je seznam postavljenih dam dame(Resitev,N) :- N1 is N - 1, dame(Resl,N1), dodaj_damo(Res1,Resitev).
Sedaj je potrebno samo še sestaviti proceduro, ki bo postavila še eno damo na šahovnico:
dame( [1,2,3,4,5,6,7,8]). dodaj_damo (Dame ,[Dama|Dame] ) :- dame(S), element(Dama,S), % izberemo novo damo za prazni stolpec not(element(Dama,Dame), % in za prazno vrstico ne_napada(Dama,Dame,1).