Come rimuovere duplicati in Prolog
Prolog è un linguaggio di programmazione dichiarativo comunemente usato nella ricerca sull'intelligenza artificiale e linguistica. A differenza dei più comuni linguaggi procedurali, la maggior parte dei programmi Prolog sono definiti come una serie di regole ed equazioni, piuttosto che come una serie di passaggi. Il seguente codice descrive il processo per rimuovere duplicati da una lista in Prolog.
Passaggio 1
Apri un editor di testo, come Blocco note, e salva il tuo file con il nome "remove_dups.pl".
Passaggio 2
Digita il codice tra le barre (lasciando fuori le barre stesse):
/ % remove_dups(+List, -NewList): % New List is bound to List, but with duplicate items removed. 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). /
La funzione "remove_dups" è definita come una serie di tre regole. La prima regola ("remove_dups([],[].)") specifica che se la lista è vuota, non si deve fare nulla; la funzione dovrebbe semplicemente terminare. La seconda regola specifica che se il primo elemento della lista appare altrove nella lista, allora deve essere rimosso (poiché è un duplicato) e l'elaborazione deve continuare usando il resto della lista richiamando di nuovo la funzione remove_dups con il primo elemento della lista omesso. La regola finale specifica che se il primo membro della lista non è presente altrove nella lista, deve essere mantenuto e l'elaborazione deve continuare.
Passaggio 3
Salva il tuo lavoro premendo insieme "Ctrl" e "S".
Suggerimento
Mentre linguaggi come C e Java risolvono solitamente i problemi usando cicli iterativi, linguaggi dichiarativi e funzionali come Prolog risolvono solitamente i problemi ricorsivamente, o richiamando ripetutamente la stessa funzione su un insieme di dati totale sempre più piccolo. Alcuni problemi sono molto più facili da risolvere con la ricorsione, anche se può essere difficile da imparare per programmatori abituati a usare solo cicli iterativi per risolvere problemi.