在SML中使用FOIL

时间:2014-10-21 01:22:18

标签: list sml multiplication

我正在编写一个小程序,它接受两个多项式的系数并将它们组合在一起,但是我只能在相同的索引处乘以元素。

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);

1 个答案:

答案 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);

但你需要弄清楚如何使它只接受实数而不是现在的整数;)