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.

Documents pareils