Laboratoire 07
- Écrire une relation
my_member/2entre une liste et ses membres.
?- my_member(1, [1,2]).
true .
?- my_member(1, [2,3]).
false.
?- my_member(X, [1,2,3]).
X = 1 ;
X = 2 ;
X = 3.
?- my_member(1, L).
L = [1|_] ;
L = [_, 1|_] ;
L = [_, _, 1|_] .
- Écrire une relation
nth/3entre une liste et son nième élément.
?- nth(0, [a,b,c], X).
X = a.
?- nth(X, [a,b,c], c).
X = 2.
- Écrire une relation
last/2entre une liste et son dernier élément. Ne pas utilisernth/3.
?- last([1,2,3], X).
X = 3.
- Écrire une relation
my_length/2entre une liste et sa taille.
?- my_length([1,2,3], N).
N = 3.
-
Ré-écrire la relation
last/2en utilisantnthetmy_length. -
Écrire une relation
same_length/2entre deux liste de la même taille. Ne pas utilisermy_length/2.
?- same_length([1,2,3], [4,5,6]).
true.
?- same_length([1,3], [4,5,6]).
false.
- Écrire une relation
reverse/2entre une liste et son inverse.
?- reverse([1,2,3], L).
L = [3, 2, 1].
?- reverse(L, [a,b,c]).
L = [c, b, a].
- Écrire une relation
flatten/2entre une liste de liste et son aplatissement.
?- flatten([[1,2], [3], [4, 5]], L).
L = [1, 2, 3, 4, 5].
- Écrire une relation
max_member/2entre une liste et son élément maximal.
?- max_member(X, [7,45,0,3]).
X = 45.
- Écrire deux relations mutuellement récursives,
even_length/2etodd_length/2pour des listes de longueur respectivement paires et impaires. Se baser sur le fait que la liste vide est de longueur paire, et qu’en ajoutant un élément, on change la parité de la longueur.
?- odd_length([]).
false.
?- odd_length([1,2,3]).
true.
?- even_length([1,2,3,4]).
true.
- Écrire une relation
fib/2entre un indice et le nombre de Fibonacci correspondant.
?- fib(0, N).
N = 0.
?- fib(1, N).
N = 1.
?- fib(2, N).
N = 1.
?- fib(3, N).
N = 2.
?- fib(4, N).
N = 3.
?- fib(5, N).
N = 5.
- Écrire une relation
ack/3correspondant à la fonction d’Ackerman-Péter.
?- ack(0, 1, N).
N = 2.
?- ack(1, 1, N).
N = 3.
?- ack(2, 1, N).
N = 5.
?- ack(3, 1, N).
N = 13.
?- ack(0, 2, N).
N = 3.
?- ack(1, 2, N).
N = 4.
?- ack(2, 2, N).
N = 7.
?- ack(3, 2, N).
N = 29.