L'inversion d'une Liste en Prolog

J'ai fini un devoir à la maison pour ma programmation de classe. J'étais censé créer un programme Prolog qui inverse une liste. Toutefois, je vais avoir du mal à comprendre pourquoi il fonctionne exactement.

%1. reverse a list
%[a,b,c]->[c,b,a]

%reverse(list, rev_List).
reverse([],[]).  %reverse of empty is empty - base case
reverse([H|T], RevList):-
    reverse(T, RevT), conc(RevT, [H], RevList).  %concatenation

Qu'est-ce exactement RevT dans ce cas? Je sais que c'est censé représenter l'inverse de T ou le reste de la liste, mais je ne vois pas comment il pourrait avoir une valeur que je n'ai pas attribué à quoi que ce soit. Est-il juste de servir le même but que RevList mais pour chaque appel récursif?

Aussi, pourquoi dois-je utiliser [H] au lieu de simplement H dans mon conc() appel de fonction? Ne pas H se référer à la tête de la liste (ex: [H])? Ou faut-il tout simplement se référer à l'élément en tête de liste (juste en H)?

S'il vous plaît aider éclaircir ce point pour moi. J'ai du mal à comprendre la logique derrière ce type de programmation.

liens utiles: learnprolognow.org/... et csupomona.edu/~jrfisher/www/prolog_tutorial/2_7.html
J'ai également commencé à mettre en place mon propre arrière/2 avec Prologue 🙂

OriginalL'auteur Jared | 2013-10-19