我正在编写一个小程序,它接受两个多项式的系数并将它们组合在一起,但是我只能在相同的索引处乘以元素。
fun polyMult([],[]) = []
| polyMult(M, []) = []
| polyMult([], N) = []
| polyMult(M as x::xs, N as y::ys) =
(x * y) :: polyMult(M, ys);
我可以成功地将M
的第一个元素乘以N
的每个元素,但之后我希望能够在M
中推进一个元素然后将其乘以它由N
中的每个元素组成。
有什么方法可以推进M
中的索引并重复乘法过程?即
polyMult(tl(M) as x::xs, N as y::ys) =
(x * y) :: polyMult(M, ys);
答案 0 :(得分:1)
沿着这些方向的东西
fun foldL F y nil = y
| foldL F y (x::xr) = foldL F (F(x,y)) xr;
fun polymult(M, nil) = nil
| polymult(nil, N) = nil
| polymult(m::mr, N) = foldL(fn(x,a) => x * a) m N::polymult(mr,N);
但你需要弄清楚如何使它只接受实数而不是现在的整数;)