如何在 SML 中模式匹配 0.0?
How to pattern match 0.0 in SML?
我有以下代码:
datatype complex = RealImg of real * real | Infinity;
fun divisionComplex(RealImg(a, b), RealImg(0.0, 0.0)) = Infinity
fun divisionComplex(RealImg(a, b), RealImg(c, d)) =
RealImg ((a * c + b * d) / (c * c + d * d), ((b * c) - (a * d))/ (c* c + d * d))
然而它失败了:
Error: syntax error: inserting EQUALOP
我很困惑。为什么会这样?我知道我无法比较 SML 中的两个实数,但我应该如何与 0 进行模式匹配?
正如您所说,SML 不允许对实数进行模式匹配,但建议改用 Real.==
或将这些数字与某个增量进行比较。
为此仅使用一个 if 语句怎么样? (还添加了一些 Infinity
个案例,只是为了使与函数参数的匹配详尽无遗,但请随意更改它,因为它不会假装正确)
datatype complex = RealImg of real * real | Infinity;
fun divisionComplex(Infinity, _) = Infinity
| divisionComplex(_, Infinity) = Infinity
| divisionComplex(RealImg(a, b), RealImg(c, d)) =
if Real.== (c, 0.0) andalso Real.== (d, 0.0)
then Infinity
else
RealImg ((a * c + b * d) / (c * c + d * d), ((b * c) - (a * d))/ (c* c + d * d))
我有以下代码:
datatype complex = RealImg of real * real | Infinity;
fun divisionComplex(RealImg(a, b), RealImg(0.0, 0.0)) = Infinity
fun divisionComplex(RealImg(a, b), RealImg(c, d)) =
RealImg ((a * c + b * d) / (c * c + d * d), ((b * c) - (a * d))/ (c* c + d * d))
然而它失败了:
Error: syntax error: inserting EQUALOP
我很困惑。为什么会这样?我知道我无法比较 SML 中的两个实数,但我应该如何与 0 进行模式匹配?
正如您所说,SML 不允许对实数进行模式匹配,但建议改用 Real.==
或将这些数字与某个增量进行比较。
为此仅使用一个 if 语句怎么样? (还添加了一些 Infinity
个案例,只是为了使与函数参数的匹配详尽无遗,但请随意更改它,因为它不会假装正确)
datatype complex = RealImg of real * real | Infinity;
fun divisionComplex(Infinity, _) = Infinity
| divisionComplex(_, Infinity) = Infinity
| divisionComplex(RealImg(a, b), RealImg(c, d)) =
if Real.== (c, 0.0) andalso Real.== (d, 0.0)
then Infinity
else
RealImg ((a * c + b * d) / (c * c + d * d), ((b * c) - (a * d))/ (c* c + d * d))