IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Prolog Discussion :

Somme d'une liste


Sujet :

Prolog

  1. #1
    Inactif  
    Inscrit en
    Mars 2006
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 352
    Points : 292
    Points
    292
    Par défaut Somme d'une liste
    Bonjour,
    j'ai pas compris le fonctionnement de ce bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    sum([], 0) :- !.
    sum([T|Q], Somme) :-
      sum(Q, S),
      Somme is T + S.
     
    writeSum :-
      sum([1,2,3,4,5,6], S),
      write(S), nl.
    coment évaluer la tête de la liste puis le reste, j'arrive pas à comprendre comment on a eu la somme = 21.
    Merci d'avance.

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Cette clause signifie que la valeur associée à la liste vide est 0.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sum([T|Q], Somme) :-
      sum(Q, S),
      Somme is T + S.
    Pour calculer la somme de la liste [T | Q], on ajoute le nombre T à la somme associée à la liste Q.
    La somme est construite à l'envers.


    Celà fonctionne comme ceci : on monte dans la récursion pour arriver en fin de liste puis on ressort de la récursion en calculant la somme.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    somme([1, 2, 3, 4]) 
     =  1 + somme([2, 3 4])
     =  1 + 2 + somme ([3  , 4])
     = 1 + 2 + 3 + somme([4])
     = 1 + 2 + 3 + 4
     = 1 + 2 +   7
     = 1 +   9
     = 10

  3. #3
    Membre expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Points : 3 377
    Points
    3 377
    Par défaut
    Citation Envoyé par sidahmed
    coment évaluer la tête de la liste puis le reste
    C'est le contraire, d'abord le prédicat calcule la somme de toute la liste sauf la tête :
    et ensuite seulement on rajoute le premier élément (avec le "is").

    En fait on peut lire le prédicat "sum" comme une spécification (définition) de la somme (c'est ce qu'on appelle la programmation déclarative) :

    La somme des éléments d'une liste vide est zéro.

    "Somme" est la somme d'une liste commençant par T et se continuant avec une liste Q si :
    Il existe un entier S qui soit la somme des éléments de Q
    "Somme" est la somme du premier élément avec S (somme de tous les autres éléments).

    Ici on a un appel récursif de "sum", qui s'arrête uniquement lorsqu'on a une liste vide (on est alors dans le premier cas).

  4. #4
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Et un Eusébius grillé , un !

  5. #5
    Membre expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Points : 3 377
    Points
    3 377
    Par défaut
    Citation Envoyé par Trap D
    Et un Eusébius grillé , un !
    Je suis sûr que tu étais plus près du serveur de DVP... tricheur !

Discussions similaires

  1. Trouver une somme via une liste de chiffres
    Par Guignon dans le forum Général Python
    Réponses: 12
    Dernier message: 27/02/2015, 17h07
  2. [Débutant] Somme sur une liste
    Par thibab dans le forum VB.NET
    Réponses: 2
    Dernier message: 06/09/2013, 16h23
  3. somme dans une liste
    Par D-Black dans le forum Général Python
    Réponses: 3
    Dernier message: 04/03/2012, 11h07
  4. Réponses: 2
    Dernier message: 28/08/2008, 08h52
  5. Somme d'une zone de liste dans un txtbox
    Par flandreau dans le forum IHM
    Réponses: 2
    Dernier message: 16/04/2008, 05h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo