Concetti Chiave
- Il programma definisce un insieme di numeri da 0 a 9 attraverso il predicato "cifra" per essere utilizzati nelle soluzioni.
- La funzione "risolvi" chiama il predicato "soluzione" per trovare combinazioni di numeri che soddisfano determinate equazioni aritmetiche.
- Il programma include quattro varianti di "soluzione", ognuna con diverse condizioni aritmetiche per la somma e il riporto.
- Le combinazioni di numeri devono essere diverse tra loro, come definito dal predicato "diversi".
- Le soluzioni trovate vengono stampate attraverso l'uso del predicato "write" per mostrare i valori di A, B e C.
Per una descrizione del problema si veda l'articolo Intelligenza artificiale: un assaggio.
cifra(0).cifra(1).
cifra(2).
cifra(3).
cifra(4).
cifra(5).
cifra(6).
cifra(7).
cifra(8).
cifra(9).
risolvi(A,B,C):-
soluzione(A,B,C).
soluzione(A,B,C) :-
/* nessun riporto - solo D+S */
cifra(D),
cifra(U),
cifra(E),
cifra(S),
cifra(I),
cifra(O),
cifra(T),
O is E + I,
T is U + E,
T is D + S - 10 + 1,
O is 1,
diversi(D,U,E,S,I,O,T),
A is D*100+U*10+E,
B is S*100+E*10+I,
C is O*1000 + T*100 + T*10 +O,
write(A),
write(B),
write(C).
soluzione(A,B,C) :-
/* riporto colonna unit e D+S*/
cifra(D),
cifra(U),
cifra(E),
cifra(S),
cifra(I),
cifra(O),
cifra(T),
O is E + I - 10,
T is U + E + 1,
T is D + S - 10,
O is 1,
diversi(D,U,E,S,I,O,T),
A is D*100+U*10+E,
B is S*100+E*10+I,
C is O*1000 + T*100 + T*10 + O,
write(A),
write(B),
write(C).
soluzione(A,B,C) :-
/* riporto colonna decine e D+S */
cifra(D),
cifra(U),
cifra(E),
cifra(S),
cifra(I),
cifra(O),
cifra(T),
O is E + I,
T is U + E,
T is D + S - 10,
O is 1,
diversi(D,U,E,S,I,O,T),
A is D*100+U*10+E,
B is S*100+E*10+I,
C is O*1000 + T*100 + T*10 +O,
write(A),
write(B),
write(C).
soluzione(A,B,C) :-
/* riporto colonne decine e unit e D+S */
cifra(D),
cifra(U),
cifra(E),
cifra(S),
cifra(I),
cifra(O),
cifra(T),
O is E + I - 10,
T is U + E + 1 - 10,
T is D + S - 10 + 1,
O is 1,
diversi(D,U,E,S,I,O,T),
A is D*100+U*10+E,
B is S*100+E*10+I,
C is O*1000 + T*100 + T*10 +O,
write(A),
write(B),
write(C).
diversi(D,U,E,S,I,O,T):-
D == U,
D == E,
D == S,
D == I,
D == O,
D == T,
U == E,
U == S,
U == I,
U == O,
U == T,
E == S,
E == I,
E == O,
E == T,
S == I,
S == O,
S == T,
I == O,
I == T,
O == T.
Domande da interrogazione
- Qual è lo scopo principale del codice presentato?
- Come vengono gestiti i riporti nelle operazioni aritmetiche?
- Qual è la funzione del predicato "diversi" nel codice?
Il codice è progettato per risolvere un problema di calcolo che coinvolge cifre e operazioni aritmetiche, cercando soluzioni che soddisfano determinate condizioni.
Il codice considera diverse situazioni di riporto, come nessun riporto, riporto nella colonna delle unità, e riporto nelle colonne delle decine e delle unità, per trovare soluzioni valide.
Il predicato "diversi" assicura che tutte le cifre D, U, E, S, I, O, T siano diverse tra loro, garantendo che ogni cifra sia unica nella soluzione.