Laboratoire 7
- Écrire une relation
my_member/2
entre 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/3
entre 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/2
entre une liste et son dernier élément. Ne pas utilisernth/3
.
?- last([1,2,3], X).
X = 3.
- Écrire une relation
my_length/2
entre une liste et sa taille.
?- my_length([1,2,3], N).
N = 3.
-
Ré-écrire la relation
last/2
en utilisantnth
etmy_length
. -
Écrire une relation
same_length/2
entre 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/2
entre 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/2
entre 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/2
entre une liste et son élément maximal.
?- max_member(X, [7,45,0,3]).
X = 45.
- Écrire deux relations mutuellement récursives,
even_length/2
etodd_length/2
pour 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/2
entre 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/3
correspondant à 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.