OCaml中的多项式长除法

问题描述

我正在尝试基于int数组类型的多项式实现多项式长除法。这里最高的度数系数在最后。我的代码基于维基百科上可用的伪代码

var sleeper = new Sleeper();

socket.on("end_sleep",function(){
  sleeper.cancel(); // pass a reason if you wanted.
})

// your code
await sleeper.wait(20000);

H

解决方法

此行

q = poly_add q t

正在测试qpoly_add q t之间的相等性,它不是赋值,并且编译器警告您忽略此测试的结果。您还会误解您的伪代码:t应该是次数degree r - degree d的多项式。

您需要使用引用,或将while循环转换为递归函数。

类似地,由于r是一个数组,其长度不能更改:

  while ((Array.length r) >= n2) && (Array.length r != 0)do

此测试在循环期间不会更改。结构性不平等为<>

另一个问题是该行

 t.(0) <- r.((Array.length r)-1)/p2.(n2-1)

正在变异零多项式,这是个坏主意。

总的来说,不清楚您的多项式是否应该可变。 如果它们不应该是可变的,则应完全避免使用a.( ) <-