Beispielprogramm mit einem übergebenen Parameter, einer initialen Tatsache und einer iterativen Aufgabe. Iteration erfolgt durch Rekursion. Vor jedem Wiedereintritt kann der Wert, der mit einem bestimmten Parameter in Beziehung steht, effektiv für den nächsten Durchlauf aktualisiert werden.
my_loop(N) :- N > 10.
my_loop(N) :- N =< 10,
write(N), nl,
Nextin is N + 1,
my_loop(Nextin).
:- my_loop(1).
A:
Die angegebenen Informationen (Fakten) durch das Programm benötigt. Sie können über die Tastatureingabe als anfängliche Argumente für ein Prädikat oder als Fakten in der Datenbank zur Verfügung gestellt werden, wie Sie vorgeschlagen. Auch nur für spezielle Situationen vorgeschlagen, können die Fakten in einige Prädikate oder Regeln fest codiert werden.
Unten und oben sind Beispiele für die Übergabe der Ausgangsinformationen als Parameter: :- my_predicate(args...)
.
Wenn es viele Fakten gibt, ist die Datenbank am besten. Ein paar Fakten, die müssen jedes Mal ändern, ist am besten von der Tastatur erhalten. Ansonsten ist es wahrscheinlich egal.
:- my_predicate([fill(j1,0),fill(j2,5)], Answer),
write(Answer),
nl.
B:
Siehe meine _ Schleife Beispiel:
In my_loop, die Aufgabe des Zählens [1..10] iterativ gelöst wird. Die Vorgaben: 1 wird als Parameter übergeben, hauptsächlich, weil das Programm dasselbe Over-and-Over ausführt:
1. nimm eine Zahl (N); Beende wenn es zu groß ist. Ansonsten ...
2. drucken Sie es aus.
3. Die nächste Zahl (N + 1)
4. Wiederholen
10 ist hart codiert berechnen. Es könnte eine Tatsache gewesen sein: stop_after(10)
.
Nun werden die Daten manipuliert werden, wird die Variable N in my_loop und {j1, j2} in myPredicate eigentlich nicht wieder werden neu zugeordnet Über und Über müssen: my_loop See. Wieder Geben Sie die Berechnung, wenn es Zeit ist, wieder die gleiche , was zu tun, aber mit unterschiedlichen Parametern:
cap(j1,2).
cap(j2,5).
my_predicate(Status, Answer) :-
got_juice(Status,0),
Answer=Status.
%%% Instead of changing values, rerun comp. with new values
%%% based on a computation made from the old ones.
my_predicate([filled(j1,J1), filled(j2,J2)], Answer) :-
Used is J1 + J2,
got_juice(Used, J), J \= 0,
cap(j1,C1), cap(C2),
%% Use cap and filled to add more to filled..
NextJ1 is J1 + ...,
NextJ2 is J2 + ...,
my_predicate(filled(j1,NextJ1), filled(..., Answer).
HINWEIS:
oben Das Prädikat ist nur Iteration in Prolog zu demonstrieren ", um die Parameter des Verwendens myProgaram ". Für eine tatsächliche Implementierung siehe das Programm, das in dem Kommentar von Matcheek vorgeschlagen wird.
* "... und ich ** habe ** ein Programm zu schreiben ..." * - Ist das Hausaufgaben? – thkala
Ich bin nicht klar, was genau das Problem ist. Kannst du mir eine vollständige Beschreibung des Problems geben, wie es von der Universität kommt? Nicht wissend, was das genaue Problem hier ist, kann ich dir keine Antwort geben, aber .. hier fand ich ein sehr ähnliches Problem zu deinem mit Antwort, die bereits gegeben http://www.informatik.uni-freiburg.de/~ki/ Lehre/ws0708/logic/prolog7.pdf, Folie 17, – matcheek