Intelligenza artificiale .. un assaggio elementi Cifre (9,8 … 0) Non ci sono riporti struttura Riporto colonna unità OR Alternativa Riporto colonna decine Riporto colonna decine e colonna unità condizioni Le cifre…lettere rispettano le regole aritmetiche Le cifre delle lettere sono tutte diverse AND Contemporaneità Universiteit van Amsterdam SWI - Prolog Digitare nel motore di ricerca: www. Swi-prolog.org Download SWI-Prolog Stable release SWI-Prolog 6.6.6 for Windows XP/Vista/7/8 Istallare il programma Eseguire il programma New … Descriviamo il campo del problema Scriviamo il nome del file cripto .. salviamo /* Finestra dell’editor testo del commento apertura commento */ chiusura commento I commenti consentono non perdere la visione d’insieme /* elementi */ Condizioni: Il connettivo OR si realizza scrivendo più volte la regola /* non vi sono riporti */ /* le cifre/lettere rispettano le regole dell’aritmetica AND le cifre sono tutte diverse */ /* riporto colonna unità */ /* le cifre/lettere rispettano le regole dell’aritmetica AND le cifre sono tutte diverse */ /* riporto colonna decine */ /* le cifre/lettere rispettano le regole dell’aritmetica AND le cifre sono tutte diverse */ /* riporto colonna unità e colonna decine */ /* le cifre/lettere rispettano le regole dell’aritmetica AND le cifre sono tutte diverse */ La descrizione del campo del problema /* elementi */ cifra(9). 9 è una cifra fine asserzione lettera minuscola: le lettere maiuscole indicano le incognite Iniziamo definendo gli elementi: asseriamo .. nove è una cifra /* elementi */ cifra(9). cifra(8). cifra(7). cifra(6). cifra(5). cifra(4). cifra(3). cifra(2). cifra(1). cifra(0). Per esplorare il campo del problema il motore di PROLOG deve conoscere l’obiettivo dalla ricerca …….. cifra(0). /* non vi sono riporti */ soluzione(Due,Sei,Otto) :- Due, Sei, Otto sono la soluzione Scritte in maiuscolo perché sono le incognite La testa della regola di ricerca delle soluzioni se …….. cifra(0). /* non vi sono riporti */ soluzione(Due,Sei,Otto) :- Due, Sei, Otto sono la soluzione SE cifra(D), D appartiene all’insieme delle cifre maiuscolo perché è un’incognita Asseriamo: le lettere sono delle cifre …….. cifra(0). /* non vi sono riporti */ soluzione(Due,Sei,Otto) :- Due, Sei, Otto sono la soluzione SE cifra(D), D appartiene all’insieme delle cifre la virgola esprime AND Asseriamo: le lettere sono delle cifre …….. cifra(0). /* non vi sono riporti */ soluzione(Due,Sei,Otto) :- Due, Sei, Otto sono la soluzione SE cifra(D), D appartiene all’insieme delle cifre AND cifra(U), U appartiene all’insieme delle cifre AND cifra(E), cifra(S), cifra(I), cifra(O), cifra(T), E appartiene all’insieme delle cifre Asseriamo: le lettere sono delle cifre AND ………… …….. cifra(I), cifra(O), cifra(T), Due, Sei, Otto sono la soluzione SE /* le cifre/lettere rispettano le regole dell’aritmetica */ O is E + I, O e E+I hanno lo stesso valore du e+ se i = ot t o La colonna delle unità …….. cifra(I), cifra(O), cifra(T), Due, Sei, Otto sono la soluzione SE /* le cifre/lettere rispettano le regole dell’aritmetica */ O is E + I, T is U + E , T is D + S , O is 1 , du e+ se i = diverse(O,E,I,T,U,D,S), ot t o La regola/condizione diverse sarà enunciata in seguito …….. Due, Sei, Otto sono la soluzione SE /* le cifre/lettere rispettano le regole dell’aritmetica */ O is E + I, T is U + E , T is D + S , O is 1 , diverse(O,E,I,T,U,D,S), Due is D*100 + U*10 + E, Sei is S*100 + E*10 + I, Otto is O*1000 + T*100 + T*10 + O, Prepariamo la comunicazione della soluzione …….. Due, Sei, Otto sono la soluzione SE /* le cifre/lettere rispettano le regole dell’aritmetica */ O is E + I, T is U + E , T is D + S , O is 1 , diverse(O,E,I,T,U,D,S), Due is D*100 + U*10 + E, Sei is S*100 + E*10 + I, Otto is O*1000 + T*100 + T*10 + O, write(Due), write(Sei), write(Otto). …….. diverse(A,B,C,D,E,F,G) :A =/= B, A =/= C, A =/= D, A =/= E, A =/= F, A =/= G, B =/= C, B =/= D, B =/= E, B =/= F, B =/= G, C =/= D, … F =/= G. Definiamo la regola DIVERSE PROLOG distingue gli argomenti di una regola dalla loro posizione make Fatti Regole Obiettivi/Domande click La prima parte “non sono riporti” è stata descritta Appare laci richiesta di conferma del salvataggio Controlliamo se abbiamo commesso degli errori di scrittura SAVE make Fatti Regole Obiettivi/Domande click Gli eventuali errori sono evidenziati: correggeteli e salvate nuovamente consult(cripto). true. 2 ?- soluzione(A,B,C). false. Si richiami la descrizione del problema [cripto] L’esecutore risponde: sono riuscito a leggere e a memorizzare Si chieda di ricercare la soluzione Nessuna soluzione è stata trovata Richiamare l’editor per aggiungere la regola: riporto colonna unità copia e incolla click Quando il motore di Prolog restituisce la prima soluzione potete terminare la ricerca … RETURN cercarne un’altra … BARRA SPAZIATRICE