один из моих предикатов дает мне список, как это в качестве вывода:SWIProlog условной суммы в список и восстановить
[m(1,2,[v(1,y),v(1,y)]),m(1,6,[v(1,y),v(5,x)]),m(1,4,[v(3,x),v(1,y)]),m(1,8,[v(3,x),v(5,x)])]
Когда символы внутри подсписка с v
элементов равны (как y
здесь):
[v(1,y),v(1,y)]
или x
здесь:
[v(3,x),v(5,x)]
Я должен суммировать цифры слева и восстановить список, как это:
[m(1,2,[v(2,y)]),m(1,6,[v(1,y),v(5,x)]),m(1,4,[v(3,x),v(1,y)]),m(1,8,[v(8,x)])]
У меня есть подобный предикат, который работает в основных списках, но я не получаю это одно право.
Это другой предикат, который работает:
simplify([], []) :- !.
simplify([X], [X]) :- !.
simplify([m(C, TD, Var), m(C2, TD, Var)| Xs], Ys) :-
sumxp(C, C2, K), simplify([m(K, TD, Var)|Xs], Ys), !.
simplify([X, Y|Xs], [X|Ys]) :- !, simplify([Y|Xs], Ys).
sumxp(Power1, Power2, TotalPower) :- TotalPower is Power1 + Power2.
Он действует таким образом:
simplify([m(2,2,[v(1,a)]),m(2,2,[v(1,a)])],R).
R = [m(4, 2, [v(1, a)])].
В вашем примере, почему это '[V (3, х), V (5, х)]' преобразуется в '[V (8, х)] 'есть другое правило, или это неверный пример? –
Когда символ одинаков, x здесь, я должен их суммировать, поэтому [v (3, x), v (5, x)] стало [v (5 + 3, x)] = [v (8, x)]. Как и до [v (1, y), v (1, y)] стало [v (2, y)]. – David