与实物匹配的模式(标准ML)

时间:2010-07-04 18:02:22

标签: functional-programming sml smlnj

这样做:

fun test a 0.0 = "good"
  | test a b = "bad";

导致错误,但如果我更改0.0,则错误消失。但是,我需要匹配0.0,我想知道是否以及如何实现。

2 个答案:

答案 0 :(得分:8)

您可以使用if语句而不是模式匹配。

请注意,浮点运算很容易出现舍入误差,因此您应检查b的绝对值是否小于某个delta,而不是等于0.0。我认为这正是为什么不允许模式匹配实数的原因。

答案 1 :(得分:6)

据说是因为在SML 97中,real不是eqtype:http://www.smlnj.org/doc/Conversion/types.html#Real-equality