Supposons que je souhaite construire une liste (L2) en ajoutant des éléments d'une autre liste (L) un par un. Le résultat devrait être exactement le même que l'entrée. Cette tâche est stupide, mais elle m'aidera à comprendre comment parcourir une liste et supprimer certains éléments.Utilisation de la récursivité et de l'ajout dans le prologue
J'ai mis en place le code suivant:
create(L, L2) :- (\+ (L == []) -> L=[H|T], append([H], create(T, L2), L2);[]).
appeler par
create([1,2,3,4], L2)
retours
L2 = [1|create([2,3,4], **)\.
qui n'est pas le résultat souhaité.
Nous vous remercions de votre réponse. Je suis sorti avec cette ligne: remove1 (L, L2): - affichage (L2), (\ + (L == []) -> L = [H | T], ajout (L2, H, L2) , enlever1 (T, L2); []). Cependant, j'obtiens une erreur: _G256 ERREUR: Hors de la pile globale Pourquoi est-ce? – screenshot345
Je dois avouer que je suis plus familier avec la syntaxe prolog plus conventionnelle où chaque prédicat est déclaré une fois pour chaque structure d'argument. Je peux le dire cependant, quand vous obtenez une erreur de pile, cela signifie que votre récursion n'a pas réussi à se terminer. C'est soit parce que vos critères de terminaison sont faux ou que le reste de votre programme ne réduit pas les arguments comme vous le pensez. Dans ce cas je soupçonne ce dernier et je vous conseillerais de regarder de près l'appendice car il me semble que vous ne voulez probablement pas de L2 des deux côtés. – charlieb