Corrigé de quelques exercices de TD
Transcription
Corrigé de quelques exercices de TD
Corrigé de quelques exercices de TD Benoît Lemaire TD 4 / Exercice 4 (5pts, première session 2010/2011) On dispose de faits qui contiennent des noms d'animaux : animal(alligator). animal(caribou). animal(vache) animal(ours). animal(cheval). animal(tortue). ... Ecrire le prédicat mutant/1 qui invente un nouveau nom d'animal à partir de deux noms d'animaux existants A1 et A2. Il faut pour cela qu'il existe un suffixe non vide de A1 qui soit un préfixe non vide de A2. Ainsi, de A1 = X.Y et A2=Y.Z, on forme le nouveau nom X.Y.Z. Exemple : ?- mutant(X). X=alligatortue ; X=caribours ; X=vacheval ... Vous pouvez utiliser le prédicat atom_chars qui permet de décomposer un mot en ses lettres. mutant(L):-animal(X),animal(Y),atom_chars(X,LX),atom_chars(Y,LY), append(LX1,LX2,LX), not(LX1=[]),not(LX2=[]), append(LX2,LY1,LY),append(LX,LY1,L1),atom_chars(L,L1),not(animal(L)). TD3 / Exercice 8 Ecrire le prédicat palindrome/1 qui détermine si un mot est un palindrome. ?- palindrome(ressasser). yes palindrome(X):-atom_chars(X,L),reverse(L,L). TD3 / Exercice 7 (rattrapage 2011, 5 pts) Soit une liste composée uniquement de 0 et de 1 et représentant un nombre binaire. a) Ecrire le prédicat queDesZeros/1 qui est vrai si la liste ne comporte que des 0. Exemple : ?- queDesZeros([0,0,0,0,0]). yes queDesZeros([]). queDesZeros([0|L]):-queDesZeros(L). b) Ecrire le prédicat valeur/2 qui détermine la valeur en base 10 du nombre binaire. Exemple : ?- valeur([1,1,0,1],N). N=13. Rappel: la valeur en base 10 d'un nombre binaire est une somme de puissances de 2, une pour chaque présence d'un 1. Par exemple 1101 donne 1*23+1*22+1*20 = 8+4+1 = 13. valeur(L,R):-reverse(L,LI),valeurInv(LI,R). valeurInv([],0). valeurInv([V|L],R) :- valeurInv(L,S), R is S*2+V.