Многочлен представлять в виде суммы членов, включающих только операции умножения и возведения в степень. Каждый такой одночлен (моном) состоит из числового коэффициента (первый сомножитель), и переменной в соответствующей степени. Следует упрощать запись одночлена, когда он является только числовым или коэффициент при переменной равен плюс-минус единице или степень равна единице. Следует также приводить подобные члены, т. е. объединять одночлены, имеющие одинаковые степени у переменной, с соответствующим изменением коэффициентов.
Надёжность и ценовая политика присущи системам видеонаблюдения http://www.sec-group.ru/brand/microdigital.html.
Указания. Некоторые фрагменты программы:
% Полиномы хранятся в виде фактов
% pol(+Name, -<список одночленов>).
% Ввод полинома: enter(+Name)
enter(X):-
write('Введите полином с именем '),write_ln(X),
enter(X,[],_).
enter(X,S,P):-
write_ln('Введите очередной одночлен или end'),
read(T),
((T=end,place(X,S,P));
(T \= end,
enter(X,[T|S],P))).
% привести подобные во введенном полиноме, упорядочить члены
% загрузить в базу данных
place(X,S,P):-
merge(S,[],P),
retractall(pol(X,_)),
assert(pol(X,P)).
% сложение полиномов, представленных списками одночленов
merge([],L,L).
merge([X|L1],L2,L):-
insert(X,L2,L3),
merge(L1,L3,L).
insert(X,[],[X]).
insert(X,[Y|T],[Z|T]):-
equal(X,Y,Z),Z \= 0,!.
insert(X,[Y|T],T):-
equal(X,Y,0),!.
insert(X,[Y|T],[X,Y|T]):-
low(X,Y).
insert(X,[Y|T],[Y|T1]):-
not(low(X,Y)),
insert(X,T,T1).
/* equal(X,Y,Z) - из двух мономов X, Y при приведении подобных полу-чаем Z; low(X,Y) - моном X предшествует моному Y. */
% приведение полинома к более "читабельному" виду
canon([],0).
canon([X],X).
canon([X,Y],Y+X).
canon([X,Y|T],Z+Y+X):-
length(T,M),M>0,
canon(T,Z).
% показать полином
show(X):-
pol(X,P),
canon(P,P1),
write('Полином с именем '),write_ln(X),write_ln(P1).
% сложение полиномов
plus_pol(X,Y,Z):-
pol(X,P1),
pol(Y,P2),
merge(P1,P2,P),
retractall(pol(Z,_)),
assert(pol(Z,P)),
show(Z).
|