la récursivité en prolog (sur les listes)
quelqu'un peut s'il vous plaît aidez-moi seulement w/notions de base sur la réalisation récursive prologue de fonctions..
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.
Quelqu'un peut m'expliquer ce soit en anglais ou en C/C++/Java que ce soit.. comment les étapes. En fait je préfère voir ce genre de choses à ajouter ou inverse.. je suis la plupart du temps que manipuler des listes de variables au lieu des nombres entiers.. (j'ai essayé de travailler grâce à ajouter comme 10 fois.. pouah).
OriginalL'auteur DJPlayer | 2011-04-28
Vous devez vous connecter pour publier un commentaire.
En ligne gratuit livre "Apprendre Prolog Maintenant" a une section dédiée à expliquer les étapes que append effectue:
http://cs.union.edu/~striegnk/apprendre-prologue-maintenant/html/node47.html#subsec.l6.la définition.ajouter
OriginalL'auteur Nick Main
append(A, B, R)
signifie queR
est le résultat de l'ajout deA
àB
.Le cas de base
dit que si
A = []
etB = X
puisR = X = B
: une liste videA
ajouté à certains autres listeB
est égal àB
.Le récursive cas
dit que si
A = [X | Y]
est un non-vide de la liste pour ajouter àB = Z
, et siW
estY
ajouté àZ
, puisR = [X | W]
.Une autre façon de le dire est: pour l'ajout d'un non-vide de la liste
A
à une autre listeB
, tout d'abord ajouter la queue deA
àB
puis ajouter la tête deA
à l'avant de la liste.OriginalL'auteur antonakos
Vous voulez le voir en C++?
Je vais immédiatement admettre que c'est horridly laid C++, mais c'est la traduction directe du Prologue de programme, sauf que les listes sont simulées à l'aide de tableaux et d'une profondeur de comptoir.
OriginalL'auteur Fred Foo
Récursivité dans prolog est à peu près identique à la récursivité dans toute autre langue. Le truc avec prolog est que
Cela signifie que vous aurez souvent besoin de construire ce que je vais appeler "travailleur" prédicats qui ne sont en fait que le travail requis et transporter 1 ou plusieurs variables qui agissent en tant que mémoire de travail. Voici une implémentation de la somme/2 à la somme d'une liste d'entiers:
Voici une implémentation en C ANSI que reflète étroitement les ci-dessus prologue code:
OriginalL'auteur Nicholas Carey