:- op(200, xfx, plus).
:- op(100, xfx, times).
これらの演算子ように私は、与えられた用語が数字と演算子のプラスと時間のみからなるように、述語変換/ 2を実装したいと+と*の対応する算術演算子に変換されます。例えば
:
?- 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.
更新:オールライトので、アイブ氏は、と、これまで出てくるコードは次のとおりです。
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.
私の句がどのように機能するかについて追加のより具体的なコメントを持っていないため申し訳ありません。ここでの考え方は、teオペレータが対応する用語に置き換えられたリストを生成することです。私の問題は、出力は用語ではなくリストであるということです。私が= ..演算子でやったことを逆にする方法はありますか?
自分自身を試してみましたか?何が効いていないのですか?あなたが遭遇する問題は何ですか? –