<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>