我想用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中編寫代碼,但我擁有的是不正確的。誰能幫忙?謝謝!在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 2014-11-14 19:28:19
其中之一,'poly_mult/3'必須有不同的定義:Prolog沒有函數。它建立(良好)關係,變量和術語之間的關係。 – false 2014-11-14 19:37:30
它爲測試而不是答案返回false。我不認爲我的代碼在Prolog中是正確的,但是在SML中是正確的。 – mpeytonfan18 2014-11-14 20:18:21