Generalizacija procedur

Iz E-študij, proste zakladnice študentskega znanja

Skoči na: navigacija, iskanje

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

  1. Reši problem N-1 dam na šahovnici.
  2. 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).
Osebna orodja
Imenski prostori
Različice
Dejanja
navigacija

Tiskanje/izvoz
orodja