ich die folgenden Operatoren definiert haben:Prolog - übersetzen Betreiber
:- op(200, xfx, plus).
:- op(100, xfx, times).
ich ein Prädikat übersetzen/2 so implementieren möchten, dass ein gegebener Begriff, der nur aus Zahlen und die Operatoren plus und Zeiten, so dass diese Betreiber wird in ihre entsprechenden arithmetischen Operatoren übersetzt: + und *.
Zum Beispiel:
?- translate((4 plus 5), Result).
Result = 4 + 5.
?- translate(((3 times 2) times 7 plus 4), Result).
Result = (3 * 2) * 7 + 4.
?-translate((5 times 3 plus 4 times 5)), Result).
Result = 5 * 3 + 4 * 5.
Update: Allright so dass der Code Ive kommen bisher mit ist:
replace([], _, _, []).
replace([El1|List], El1, El2, [El2|Result]) :-
replace(List, El1, El2, Result), !.
replace([H|List], El1, El2, [H|Result]) :-
replace(List, El1, El2, Result). %replaces an element in a list with
%another element.
translate(Term, ListResult2):-
Term =.. ListResult,
replace(ListResult, times, *, ListResult1),
replace(ListResult1, plus, +, ListResult2). %This will make a list of a
% a term and replace the
%operators the right way.
Sorry für nicht hinzugefügt spezifischere Kommentare darauf, wie meine Klauseln arbeiten. Die Idee ist hier, eine Liste zu erstellen, in der die Operatoren durch die entsprechenden Terme ersetzt werden. Mein Problem ist, dass die Ausgabe eine Liste anstelle eines Begriffs ist. Gibt es eine Möglichkeit umzukehren, was ich mit dem = .. Operator gemacht habe ???
Was haben Sie versucht, sich selbst? Was funktioniert nicht? Auf welche Probleme stoßen Sie? –