Zahlen in einer Prologliste aufsummieren Verständnisproblem [PROLOG]

  • Hi Leute,


    ich bin gerade dabei nachzuvollziehen was bei meinem Code weiter unten passiert. Ich weiß das hier die Zahlen aufsummiert werden aber ich verstehe nicht wie hier rekursive aufgerufen wird und wann der Terminierungsfall eintritt.
    Vielleicht könnte mir das jemand genau erklären bitte.



    Ich hoffe ihr könnt mir helfen.


    lg smoke

  • Hallo SmokeTM!


    Da [3,5,9] dasselbe ist wie [3|[5,9]] kann Prolog die von dir angegebene Regel verwenden um herauszufinden für welche S, das Prädikat listensumme wahr ist:

    Code
    1. listensumme([3,5,9],S) :-
    2. listensumme([5,9], S'),
    3. S = S' + 3.


    Hier ist S allerdings noch immer an keinen Wert gebunden, da S' nicht bekannt ist.
    Aber Prolog kann die Regel nochmal bei listensumme([5,9]) anwenden:

    Code
    1. listensumme([3,5,9],S) :-
    2. listensumme([9], S''),
    3. S' = S'' + 5,
    4. S = S' + 3.


    Jetzt müsste der Wert für S'' bekannt sein um S an einen Wert zu binden. Nachdem man das Fakt listensumme([LH],LH) verwendet, kann S'' an den Wert 9 gebunden werden:

    Code
    1. listensumme([3,5,9],S) :-
    2. listensumme([9], 9),
    3. S' = 9 + 5,
    4. S = S' + 3.


    ... S' ebenfalls:

    Code
    1. listensumme([3,5,9],S) :-
    2. listensumme([9], 9),
    3. 14 = 9 + 5,
    4. S = 14 + 3.


    Da die Ableitungen immer eindeutig waren (in keinem Schritt war eine andere Regel/Fakt anwendbar), ist S=17 die einzige Lösung, welche das Prädikat wahr macht.