Laboratoire 7

  1. É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|_] .
  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.
  1. Écrire une relation last/2 entre une liste et son dernier élément. Ne pas utiliser nth/3.
?- last([1,2,3], X).
X = 3.
  1. Écrire une relation my_length/2 entre une liste et sa taille.
?- my_length([1,2,3], N).
N = 3.
  1. Ré-écrire la relation last/2 en utilisant nth et my_length.

  2. Écrire une relation same_length/2 entre deux liste de la même taille. Ne pas utiliser my_length/2.

?- same_length([1,2,3], [4,5,6]).
true.

?- same_length([1,3], [4,5,6]).
false.
  1. É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].
  1. É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].
  1. Écrire une relation max_member/2 entre une liste et son élément maximal.
?- max_member(X, [7,45,0,3]).
X = 45.
  1. É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.
  1. É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.
  1. É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.