2
總結兩個部分我有一個定義的數據類型在SML
datatype expression = Constant of int
| Variable of string
| Operator of string * expression
| Pair of expression list
| List of expression list
我因爲有一個表格兩個部分:
Operator("/", Pair [Constant x, Constant y])
或
Operator("/", Pair [Variable x, Constant y])
我需要總結這兩個分數並返回一個新分母,它以兩個分母的最小公倍數作爲分母。
我設法使它工作,但我的代碼似乎不必要的複雜和令人費解。有沒有辦法寫這個更短? 我設法到目前爲止做:
fun add (a,b) =
case (a,b) of
(Operator("/", Pair [Constant x1, Constant y1]),
Operator("/", Pair [Constant x2, Constant y2]))
=> Operator("/", Pair [Constant ((x1*((lcm(y1,y2) div y1)))+(x2*(lcm(y1,y2) div y2))), Constant (lcm(y1,y2))])
| (Operator("/", Pair [Variable x1, Constant y1]),
Operator("/", Pair [Constant x2, Constant y2 ]))
=> Operator("/", Pair[
Operator("+", Pair[
Operator("*", Pair[Variable x1, Constant (lcm(y1,y2) div y1)]),
Constant (x2* (lcm(y1,y2) div y2)) ]),
Constant (lcm(y1,y2))])
| (Operator("/", Pair [Constant x1, Constant y1]),
Operator("/", Pair [Variable x2, Constant y2 ]))
=> Operator("/", Pair[
Operator("+", Pair[
Operator("*", Pair[Variable x2, Constant (lcm(y1,y2) div y2)]),
Constant (x1* (lcm(y1,y2) div y2)) ]),
Constant (lcm(y1,y2))])
| (Operator("/", Pair [Variable x1, Constant y1]),
Operator("/", Pair [Variable x2, Constant y2 ]))
=> Operator("/", Pair[
Operator("+", Pair[
Operator("*", Pair[Variable x1, Constant (lcm(y1,y2) div y1)]),
Operator("*", Pair[Variable x2, Constant (lcm(y1,y2) div y2)])]),
Constant (lcm(y1,y2))])