:- use_module(library(clpfd)).

%Une liste est soit vide
%	soit un élément suivi d'une liste
%	
%	longueur
%	%liste vide
longueur([],0).

%liste avec au moins un élément
longueur([_X|L],Res) :-
    longueur(L,Res1),
    Res #= Res1+1.

% somme
%liste vide
somme([],0).
%liste avec au moins un élément
somme([X|L],Res) :-
    somme(L,Res1),
    Res #= Res1+X.
 
% produit
%liste vide
produit([],1).
%liste avec au moins un élément
produit([X|L],Res) :-
    produit(L,Res1),
    Res #= Res1*X.