Prolog 中的两个多项式相乘 [英] Multiply Two Polynomials in Prolog

查看:30
本文介绍了Prolog 中的两个多项式相乘的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用 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 中编写代码,但我所拥有的不正确.任何人都可以帮忙吗?谢谢!

I am trying to use Prolog to implement the polynomial multiplication that multiplies two polynomials. Below is the code given in SML, but I need it in Prolog. A test solution for SML is poly_mult([1.0, 5.0, 1.0], [3.0, ~10.0, 15.0]); and will return val it = [3.0,5.0,~32.0,65.0,15.0] : real list I tried to write the code in Prolog but what I have is not correct. Can anyone help? Thanks!

在 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]).

推荐答案

poly_sum(Ms,[],Ms) :- Ms = [_|_].
poly_sum([],Ns,Ns).
poly_sum([M|Ms], [N|Ns], [S|Ss]) :-
   S is M+N,
   poly_sum(Ms, Ns, Ss).

scal_prod([],_Sc,[]).
scal_prod([M|Ms], Sc, [P|Ps]) :-
   P is M*Sc,
   scal_prod(Ms, Sc, Ps).

poly_prod(_,[],[]).
poly_prod(Ms,[N|Ns], Xs2) :-
   poly_prod(Ms,Ns, Xs1),
   scal_prod(Ms, N, Ps),
    poly_sum(Ps, [0.0|Xs1], Xs2).


?- poly_prod([1,2,3,4],[5,6,7],Xs).
Xs = [5.0, 16.0, 34.0, 52, 45, 28] ;
false.

这篇关于Prolog 中的两个多项式相乘的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆