Bonjour,
alors voilà, j'aimerais construire sur prolog l'ensemble des palindromes sur {a,b}. Mais je rencontre quelques difficultés. Alors de base les mots a et b, représentés respectivement par les listes [a] et [b] appartiennent au langage. Ensuite, si un mot est un palindrome alors si on lui rajoute la même lettre au début et à la fin on obtient un nouveau palindrome. En me basant sur ça j'ai écris ces prédicats :
avec addlast une fonction qui sert à ajouter un terme X à une liste L, le résultat est la liste Lp :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 langage6([a]). langage6([b]). langage6([a|Sp]):-langage6(S),addlast(a,S,Sp). (1) langage6([b|Sp]):-langage6(S),addlast(b,S,Sp). (2)
J'ai plusieurs soucis avec ce code : lorsque je donne à l'interpréteur un mot qui n'est pas un palindrome il ne me retourne pas "false" mais il continue à chercher indéfiniment.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 addlast(X,[],[X]). addlast(X,[H|L],[H|Lp]):-addlast(X,L,Lp).
Lorsque je lui demande la liste des palindromes il ne me donne que les mots qui commencent et se terminent par a. ("a,"b","a,a,a","a,b,a","a,a,a,a,a","a,a,b,a,a"). (à noter que si je change la place de 1 et 2 il ne me donne cette fois que les mots qui commence et se terminent par b).
Partager