<div class="notebook">
<div class="nb-cell markdown" name="md1">
# Listes circulaires en ProLog, exemple de somme.
</div>
<div class="nb-cell program" data-background="true" name="p1">
listeVersListeCirculaire(L,C) :-
l2lc(L,C,C).
l2lc([],L,L).
l2lc([E|R],L,[E|S]):-
l2lc(R,L,S).
</div>
<div class="nb-cell query" name="q1">
listeVersListeCirculaire([1,2,3],C).
</div>
<div class="nb-cell markdown" name="md2">
rem. pour la liste vide, cela ne donne pas grand chose, une variable libre ... (mais a-t-on des listes vides circulaires en C ?)
</div>
<div class="nb-cell program" data-background="true" name="p2">
sommeListeCirculaire(C,S) :-
slc(C,C,S).
slc([E|C],C,E).
slc([E|L],C,S) :-
dif(L,C),
slc(L,C,R),
S is E+R.
</div>
<div class="nb-cell query" name="q2">
listeVersListeCirculaire([1,2,3],C), sommeListeCirculaire(C,S).
</div>
<div class="nb-cell markdown" name="md3">
rem. pour les listes circulaires avec répétition :
</div>
<div class="nb-cell query" name="q3">
listeVersListeCirculaire([1,2,3,1,2,3],C), sommeListeCirculaire(C,S).
</div>
</div>