我想在F#中編寫一個遞歸添加多項式的函數。我的多項式可以表示爲元組列表。F#遞歸添加多項式
例如,2×^ 4 + 3×^ 2 + X + 5等於[(2.0,4);(3.0,2);(1.0,1);(5.0,0)]
所有多項式的結構都是合理的(沒有相同度的重複項,沒有零係數的項,除非它是零多項式,按降序指數排序的項沒有空輸入表)。
我在做這件事時遇到了麻煩。這裏是我的代碼
type term = float * int
type poly = term list
let rec atp(t:term,p:poly):poly =
match p with
| [] -> []
| (a, b) :: tail -> if snd t = b then (fst t + a, b) :: [] elif snd t > b then t :: [] else ([]) :: atp(t, tail)
(* val atp : t:term * p:poly -> poly *)
let rec addpolys(p1:poly,p2:poly):poly =
match p1 with
| [] -> []
| (a,b) :: tail -> atp((a,b), p2) @ addpolys(tail, p2)
我有兩個多項式
val p2 : poly = [(4.5, 7); (3.0, 4); (10.5, 3); (2.25, 2)]
val p1 : poly = [(3.0, 5); (2.0, 2); (7.0, 1); (1.5, 0)]
,當我打電話的功能,我的結果是
val p4 : poly =
[(4.5, 7); (3.0, 5); (3.0, 4); (3.0, 5); (10.5, 3); (3.0, 5); (4.25, 2)]
當正確的答案是
[(4.5, 7); (3.0, 5); (3.0, 4); (10.5, 3); (4.25, 2); (7.0, 1); (1.5, 0)]
你的代碼,讓我在FSI的錯誤:「錯誤FS0001:預計這種表達有類型術語,但這裏的類型爲「列表」請提供正確的代碼。 – Olaf