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))])