Différences
Ci-dessous, les différences entre deux révisions de la page.
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:07] – [Sudoku] jcheron | cnam:utc503:declarative:prolog [2023/12/07 01:30] (Version actuelle) – [Listes] jcheron | ||
---|---|---|---|
Ligne 189: | Ligne 189: | ||
</ | </ | ||
+ | ==== 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). | ||
+ | </ | ||
+ | === Liste des nombres de 1 à N === | ||
+ | <sxh prolog> | ||
+ | /* de 1 à N */ | ||
+ | croissant(0). | ||
+ | croissant(N) :- N>0, N1 is N-1, croissant(N1), | ||
+ | </ | ||
+ | |||
+ | === Nombres pairs === | ||
+ | |||
+ | <sxh prolog> | ||
+ | pair(0). | ||
+ | pair(X) :- X>0, X2 is X-2, pair(X2). | ||
+ | </ | ||
+ | |||
+ | === 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. | ||
+ | </ | ||
+ | |||
+ | === Factorielle === | ||
+ | <sxh prolog> | ||
+ | fact(0,1). | ||
+ | fact(N,X) :- N>0, N1 is N-1, fact(N1, | ||
+ | </ | ||
+ | |||
+ | === 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. | ||
+ | </ | ||
+ | |||
+ | ==== 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 []. | ||
+ | </ | ||
+ | |||
+ | === Affichage === | ||
+ | |||
+ | <sxh prolog> | ||
+ | affiche([]). | ||
+ | affiche([X|R]) :- write(X), nl, affiche(R). | ||
+ | </ | ||
+ | |||
+ | === Premier élément === | ||
+ | |||
+ | <sxh prolog> | ||
+ | premier([X|_], | ||
+ | </ | ||
+ | |||
+ | === Dernier élément === | ||
+ | |||
+ | <sxh prolog> | ||
+ | dernier([X], | ||
+ | dernier([_|L], | ||
+ | </ | ||
+ | |||
+ | === Compte === | ||
+ | |||
+ | <sxh prolog> | ||
+ | compte([], | ||
+ | compte([_|R], | ||
+ | </ | ||
+ | |||
+ | === Somme === | ||
+ | |||
+ | <sxh prolog> | ||
+ | somme([], | ||
+ | somme([X|R], | ||
+ | </ | ||
==== Sudoku ==== | ==== Sudoku ==== | ||
=== Base de connaissances : === | === Base de connaissances : === | ||
- | <sxh prolog> | + | <sxh prolog; |
sudoku(Rows) :- | sudoku(Rows) :- | ||
length(Rows, | length(Rows, | ||
Ligne 223: | Ligne 307: | ||
<sxh prolog; | <sxh prolog; | ||
+ | use_module(library(clpfd)). | ||
+ | [sudoku]. | ||
problem(1, Rows), sudoku(Rows), | problem(1, Rows), sudoku(Rows), | ||
</ | </ |