对 OCaml 类型的编译误解

compilation misunderstanding over types in OCaml

我的学校作业要求我使用 属性:

将两个多项式 A 和 B 相乘
if A = a +pX then AB = aB + XPB

为了实现这个,我编写了这个递归程序,它将多项式实现为它的系数列表:

let rec mul p q = match (p,q) with
|a::b,q -> add (mulscal q a) (mul b [0.]::q)
|[],q -> p;;

但是我得到这个错误:

Line 4, characters 11-44:
4 | |a::b,q -> add (mulscal q a) (mul b [0.]::q)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Error: This expression has type float list
       but an expression was expected of type float

考虑到这正是我想要的(代表多项式的浮点数列表),这很奇怪。

如果有人想让 Ocaml 明白程序是“正确的”,我将不胜感激。

PS:很抱歉缺少详细信息,但主题是法语,翻译它需要太多时间。

我发现你只需要更换

|a::b,q -> add (mulscal q a) (mul b [0.]::q)

来自

|a::b,q -> add (mulscal q a) (mul b (0.::q))