| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente |
| cnam:utc503:declarative:prolog [2023/12/07 01:06] – [Exercice] jcheron | cnam:utc503:declarative:prolog [2023/12/07 01:30] (Version actuelle) – [Listes] jcheron |
|---|
| </WRAP> | </WRAP> |
| |
| ==== Sudoku ==== | ==== Récursivité ==== |
| | === Liste des nombres de N à 1 === |
| | <sxh prolog> |
| | /* de N à 1 */ |
| | decroissant(0). |
| | decroissant(N) :- N>0, write(N), nl, N1 is N-1, decroissant(N1). |
| | </sxh> |
| | === Liste des nombres de 1 à N === |
| | <sxh prolog> |
| | /* de 1 à N */ |
| | croissant(0). |
| | croissant(N) :- N>0, N1 is N-1, croissant(N1), write(N), nl. |
| | </sxh> |
| | |
| | === Nombres pairs === |
| |
| Base de connaissances : | |
| <sxh prolog> | <sxh prolog> |
| | pair(0). |
| | pair(X) :- X>0, X2 is X-2, pair(X2). |
| | </sxh> |
| | |
| | === Somme des N premiers entiers === |
| | |
| | <sxh prolog> |
| | som(0,0). |
| | som(N,X) :- N>0, N1 is N-1, som(N1,X1), X is N+X1. |
| | </sxh> |
| | |
| | === Factorielle === |
| | <sxh prolog> |
| | fact(0,1). |
| | fact(N,X) :- N>0, N1 is N-1, fact(N1,X1), X is N*X1. |
| | </sxh> |
| | |
| | === Suite de Fibonacci === |
| | <sxh prolog> |
| | fibo(1,1). |
| | fibo(2,1). |
| | fibo(N,X) :- N>2, U is N-1, V is N-2, fibo(U,U1), fibo(V,V1), |
| | X is U1+V1. |
| | </sxh> |
| | |
| | ==== Listes ==== |
| | <WRAP info> |
| | En Prolog, Les tableaux sont des listes, dans lesquelles les indices des éléments ne sont pas disponibles. |
| | |
| | En revanche, une liste L peut toujours être décomposée en L=[E|R] où E est le premier élément de la liste (E n'est pas une liste) et où R est le reste de la liste L (R est une liste : c'est en fait la tranche de L qui démarre apres E). |
| | |
| | La liste vide est []. |
| | </WRAP> |
| | |
| | === Affichage === |
| | |
| | <sxh prolog> |
| | affiche([]). |
| | affiche([X|R]) :- write(X), nl, affiche(R). |
| | </sxh> |
| | |
| | === Premier élément === |
| | |
| | <sxh prolog> |
| | premier([X|_],X). |
| | </sxh> |
| | |
| | === Dernier élément === |
| | |
| | <sxh prolog> |
| | dernier([X],X). |
| | dernier([_|L],X) :- dernier(L,X). |
| | </sxh> |
| | |
| | === Compte === |
| | |
| | <sxh prolog> |
| | compte([],0). |
| | compte([_|R],N) :- compte(R,N1), N is N1+1, N>0. |
| | </sxh> |
| | |
| | === Somme === |
| | |
| | <sxh prolog> |
| | somme([],0). |
| | somme([X|R],N) :- somme(R,N1), N is N1+X. |
| | </sxh> |
| | ==== Sudoku ==== |
| | |
| | === Base de connaissances : === |
| | |
| | <sxh prolog;title:sudoku.pl> |
| sudoku(Rows) :- | sudoku(Rows) :- |
| length(Rows, 9), maplist(same_length(Rows), Rows), | length(Rows, 9), maplist(same_length(Rows), Rows), |
| </sxh> | </sxh> |
| |
| Résolution | === Résolution === |
| <sxh prolog;gutter:false> | <sxh prolog;gutter:false> |
| | use_module(library(clpfd)). |
| | [sudoku]. |
| problem(1, Rows), sudoku(Rows), maplist(portray_clause, Rows). | problem(1, Rows), sudoku(Rows), maplist(portray_clause, Rows). |
| </sxh> | |
| </sxh> | </sxh> |