为我提供了多项式类型,并将其定义如下: 我想拥有一个将项添加到多项式并保持一定度数k小于或等于1的项的函数。我想我应该创建一个函数以将具有相同度数的项合并在一起并在addTermToPolynomial函数中使用,这是我所拥有的:
type poly=Poly of (float*int) list
type term = Term of float *int
exception EmptyList
let rec mergeCommonTerm(p:poly)=
match p with
|Poly [] -> Poly []
|Poly (a::af)-> match mergeCommonTerm (Poly af) with
|Poly recursivep ->
let rec addTermToPoly (x:term, p:poly)=
match x with
|Term (coe, deg)-> match p with
|Poly[] -> Poly [(coe,deg)]
|Poly (a::af)-> if snd a=deg then Poly ((fst a+coe,deg)::af)
else match addTermToPoly (x,Poly af) with
|Poly recusivep-> mergeCommonTerm(a::recusivep)
我不知道如何完成mergeCommonTerm函数,因为我不知道如何像double for循环那样遍历列表。请帮助我编写类似于term函数的合并。
答案 0 :(得分:0)
<span *ngIf="item.controls.name.errors?.unique">not unique</span>
和term
类型是用作记录的区分联合。它们很容易成为unwrapped来使用基础类型(分别为poly
和float * int
)。
您可以使用辅助递归函数使事情更加容易,以度数递减的方式向元组列表添加元组。这还允许单独管理EmptyList异常。
(float * int) list
编辑:在示例中添加了一些注释
let addTermToPoly (Term (coef,deg), Poly lst) =
let rec loop = function
| [] -> [(coef, deg)]
| (c, d) :: ts ->
if d < deg then (coef, deg) :: lst
elif d = deg then (coef + c, d) :: ts
else (c, d) :: loop ts
if (lst.IsEmpty)
then raise EmptyList
else Poly (loop lst) processed with loop function