Bonjour, je suis débutant en Prolog et j'utilise GNU-Prolog.
J'ai un exercice à faire en Prolog qui est de calculer les cryptarithmes (type SEND+MORE=MONEY ou DEUX+NEUF=ONZE).
J'ai effectué mon programme en plusieurs versions:
crypta([D,E,U,X],[N,E,U,F],[O,N,Z,E]).
crypta([D,E,U,X],[N,E,U,F],[O,N,Z,E],10). (prise en compte de la base de calcul)
=> Ces deux versions marchent.
Maintenant, la version "ultime" serait de rentrer directement les mots sous formes d'atomes (c'est bien le mot à utiliser ?):
crypta(deux,neuf,onze,10)
Mais il y a un problème lors du fd_domain, la liste n'est pas correcte. En effet, atom_chars(deux,L1) me renvoie [d,e,u,x] alors qu'il me faudrait [D,E,U,X]. Comment peut-on associer une variable à chaque élément de cette liste (automatiquement, car les mots ont une longueur variable) ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 /* Conversion des atomes en listes */ atom_chars(A1,L1), atom_chars(A2,L2), atom_chars(A3,L3), /* Inversion des listes */ reverse(L1,RA1), reverse(L2,RA2), reverse(L3,RA3), /* Concaténation des listes */ append(RA1,RA2,Ltemp), append(Ltemp,RA3,L), /* Sort des listes */ sort(L,Lsort), /* Domain */ LIMIT is BASE-1, fd_domain(Lsort,0,LIMIT),
Partager