recursão no prólogo (nas listas)

alguém pode me ajudar com o básico sobre como executar funções de prólogo recursivo ..

append([],X,X). % base
append([X|Y],Z,[X|W]) :- append(Y,Z,W). %recursive

% base case
addup([], 0). % sum of the empty list of numbers is zero

% recursive case: if the base-case rule does not match, this one must:
addup([FirstNumber | RestOfList], Total) :-
    addup(RestOfList, TotalOfRest),   % add up the numbers in RestOfList
    Total is FirstNumber + TotalOfRest.

Alguém pode explicar em inglês ou em C / C ++ / Java, seja qual for ... como as etapas. Na verdade, eu preferiria ver algo como acrescentar ou reverter .. Estou apenas manipulando listas de variáveis em vez de números inteiros .. (Tentei trabalhar com o acréscimo 10 vezes .. ugh

questionAnswers(4)

yourAnswerToTheQuestion