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

LDK*_*LDK 1 functional-programming sml smlnj

这样做:

fun test a 0.0 = "good"
  | test a b = "bad";
Run Code Online (Sandbox Code Playgroud)

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

sep*_*p2k 8

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

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


new*_*cct 6

据说这是因为真实不是SML 97中的eqtype:http://www.smlnj.org/doc/Conversion/types.html#Real-equality