Я пытаюсь использовать Prolog для реализации умножения многочленов, который умножает два многочлена. Ниже приведен код, указанный в SML, но мне он нужен в Prolog. Тестовым решением для SML является poly_mult ([1.0, 5.0, 1.0], [3.0, ~ 10.0, 15.0]); и вернет val it = [3.0,5.0, ~ 32.0,65.0,15.0]: реальный список Я попытался написать код в Prolog, но то, что у меня есть, неверно. Может ли кто-нибудь помочь? Благодаря!Умножить два многочлена в прологе
В SML
fun poly_add (M,nil) = M
| poly_add (nil,N) = N
| poly_add ((m:real)::mr, n::nr) = (m+n)::poly_add(mr,nr);
fun scalar_mult (nil,m) = nil
| scalar_mult((m:real)::mr,n) = (m*n)::scalar_mult(mr,n);
fun poly_mult (M,nil) = nil
| poly_mult (M,n::nr) = poly_add (scalar_mult(M,n), 0.0::poly_mult(M,nr));
ЧТО Я ИМЕЮ В Прологе
poly_add(Constant,[],Constant) :- !.
poly_add([],Constant2,Constant) :- !.
poly_add([Head1 | Head2], [Tail | Tail2], [HeadSum |TailSum]) :-
HeadSum is Head + Tail,
poly_add(Head2, Tail2, TailSum).
scal_mult([],Head,[]) :- !.
scal_mult([Head | Head2], [Tail], [HeadMult | TailMult]) :-
HeadMult is Head * Tail,
scal_mult(Head2, Tail, TailMult).
poly_mult(Constant,[],[]) :- !.
poly_mult([Constant], [Tail | Tail2]) :-
poly_add(scal_mult([Constant, Tail]), [0 | poly_mult] ([Constant, Tail2]).
Можете ли вы подробнее остановиться на * то, что я не правильно *? – lurker
Во-первых, 'poly_mult/3' должен быть определен по-разному: у Prolog нет функций. Он имеет отношения, которые устанавливают (хорошо) отношения между переменными и членами. – false
Он возвращает false для теста вместо ответа. Я не думаю, что мой код прав в Prolog, но он прав в SML. – mpeytonfan18