[Prolog] Division


Heinzi1991

Erfahrenes Mitglied
Hallo liebe Community,

ich hab mal eine Frage:

Ich muss eine Division "div(A,B,E,R) mit Prolog schreiben und muss drei Prädikate einsetzen:
-times(A,B,P)
-add(A,B,S)
-gt(A,B)

times, add und gt sind schon definiert worden und funktionieren einwandfrei, aber wie setz ich diese drei jetzt richtig ein damit meine Division stimmt. Den eine Division kann man ja auch so schreiben:
A = B * E + R.

Bitte um Hilfe und vielen Dank schon im voraus.
 

Heinzi1991

Erfahrenes Mitglied
also
add summiert die 2 zahlen
times multipliziert 2 zahlen
gt vergleicht ob die erste zahl größer ist als die zweite.

meine div schaut zurzeit so aus:
Code:
div(A,B,Q,R) :- times(Q,B,T), gt(A,T), add(T,R,A).
und wenn ich es im swi prolog so eingebe:
Code:
?- div(s(s(s(s(s(0))))),s(s(0)), Q,R).
kommen drei lösungen raus, und die dritte ist die richtige, also was genau mach ich falsch.
 

sheel

I love Asm
Was ich eig. meinte: Sind P bzw. S die Ergebnisse, und gibt gt nur true/false zurück oder was tut das genau?
Und was ist s() ?
 

Heinzi1991

Erfahrenes Mitglied
P und S sind ergebnisse und gt gibt nur true/false aus [außer man packt bei der abfrage eine unbekannte an]
s() sind zahlen in induktiver Struktur; also s(s(0)) = 2.
 

ikosaeder

Teekannen-Agnostiker
Hi,
ich bin zufällig über diesen Thread gestolpert und wollte helfen, aber ich muss gestehen, ich verstehe nicht einmal die Frage. Kannst du bitte mal genau schreiben was du ausrechnen willst?
Für mich sieht das so aus, als wolltest du den Euklidischen Algorithmus implementieren:
http://de.wikipedia.org/wiki/Euklidischer_Algorithmus
Ist das richtig? Dann kommst du aber mit times und add nicht weiter.