Az ismétlődések eltávolítása a Prologban
A Prolog egy deklaratív programozási nyelv, amelyet gyakran használnak a mesterséges intelligencia és a nyelvészeti kutatásokban. Az elterjedtebb eljárási nyelvekkel ellentétben a legtöbb Prolog program szabály- és egyenletsorozatként van meghatározva, nem pedig lépések sorozataként. A következő kód azt a folyamatot írja le, amellyel eltávolítható a másolatok egy listáról a Prologban.
1. lépés
Nyisson meg egy szövegszerkesztőt, például a Jegyzettömböt, és mentse el a fájlt „remove_dups.pl” néven.
2. lépés
Írja be a kódot a perjelek közé (a perjeleket hagyja ki):
/ % remove_dups(+Lista, -ÚjLista):% Az új lista a listához van kötve, de az ismétlődő elemek eltávolítva. remove_dups([], []).
remove_dups([First | Rest], NewRest) :- member(First, Rest), remove_dups(Rest, NewRest).
remove_dups([First | Rest], [First | NewRest]) :- not(member(First, Rest)), remove_dups(Rest, NewRest). /
A "remove_dups" függvény három szabályból álló sorozatként van definiálva. Az első szabály ("remove_dups([],[].)") meghatározza, hogy ha a lista üres, akkor semmit sem szabad tenni; a függvénynek egyszerűen vissza kell térnie. A második szabály azt határozza meg, hogy ha a lista első eleme bárhol máshol megjelenik a listában, akkor azt el kell távolítani (mivel ismétlődésről van szó), és a feldolgozásnak a lista többi részének kell folytatódnia a remove_dups függvény ismételt meghívásával az első elemmel. a kihagyott listában. A végső szabály előírja, hogy ha a lista első tagja nincs máshol a listában, akkor azt meg kell őrizni, és a feldolgozást folytatni kell.
3. lépés
Mentse el munkáját a "Ctrl" és az "S" együttes lenyomásával.
Tipp
Míg az olyan nyelvek, mint a C és a Java, általában iteratív ciklusok segítségével oldják meg a problémákat, a deklaratív és funkcionális nyelvek, mint például a Prolog, általában rekurzív módon oldják meg a problémákat, vagy ugyanazt a függvényt ismételten meghívják a teljes adat egyre kisebb halmazán. Néhány probléma sokkal könnyebben megoldható rekurzióval, bár nehéz lehet megtanulni a programozóknak, akik csak iteratív ciklusokat használnak a problémák megoldásához.