[Prolog] Produktsumme zweiter Listen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • [Prolog] Produktsumme zweiter Listen

    Guten Tag zusammen,

    ich bin Prolog Anfänger und brauche einmal bitte Unterstützung. Ich muss eine Übungsaufgabe für die FH lösen die folgendermaßen lautet:

    Schreiben Sie ein Prolog Programm, dass die Summe aller paarweise Produkte zweier Listen berechnet. Es sind die Listen X und Y gegeben. Das Prolog Programm soll dann die Summe N SUMME xi * yi i=1 berechnen wobei xi i-te Element der Liste X ist. Was passiert wenn die Listen nicht gleich lang sind?
    Hier mal mein Ansatz:

    Quellcode

    1. sp([],[],S).
    2. sp([X|R1],[Y|R2],S):- M is X*Y, S is S+M, sp([R1],[R2],S).

    Rekursionsabbruch soll also die leere Liste sein. X * Y wird berechnet und dann die summe gebildet und der Kopf der Liste abgeschnitten. Das Programm funktioniert nicht, ich denke die Zwischensummern werden nicht richtig übergeben???

    VIelen Dank
  • Was heißt funktioniert nicht. Wie sah der Aufruf aus? Benutzt du SWI-Prolog? Wenn ja hast du da mal den Debugger verwendet? Du brauchst außerdem noch zwei weitere Regeln falls jeweils nur eine der beiden Listen leer ist.
    ~ mfg SeBa

    Ich beantworte keine PMs zu Computer-/Programmierproblemen. Bitte wendet euch an das entsprechende Forum.

    [Blockierte Grafik: http://i.creativecommons.org/l/by-sa/3.0/80x15.png]
  • Sorry hab den Thread nicht mehr auf dem Zettel gehabr. Wahrscheinlich ist es jetzt schon zu spät, aber vielleicht hilft es ja doch noch ein wenig. Die Lösung müsste so aussehen

    Quellcode

    1. sp([],[],0).
    2. sp([X|R1],[Y|R2],S):- sp(R1,R2,S1),M is X*Y, S is S1+M.


    Der Rekursionsabbruch muss etwas geändert werden, damit beim letzten Aufruf S mit 0 unifiziert wird. Außerdem sind R1 & R2 schon Listen, du darfst also keine [eckige Klammern] darum machen. Außerdem hab ich den Aufruf von sp nach vorne und S1 als zusätzliche Variable eingeführt, damit das Problem mit den noch nicht instanziierten Variablen nicht auftritt. Was noch fehlt sind die Regel(n) für ungleich lange Listen.
    ~ mfg SeBa

    Ich beantworte keine PMs zu Computer-/Programmierproblemen. Bitte wendet euch an das entsprechende Forum.

    [Blockierte Grafik: http://i.creativecommons.org/l/by-sa/3.0/80x15.png]