Сравнение шаблонов с реалами (стандарт ML) - PullRequest
1 голос
/ 04 июля 2010

Делая это:

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

приводит к ошибке, но если я изменю 0.0, ошибка исчезнет.Тем не менее, мне нужно соответствовать 0.0, и мне интересно, если и как это можно сделать.

Ответы [ 2 ]

8 голосов
/ 04 июля 2010

Вы можете просто использовать оператор if вместо сопоставления с образцом.

Обратите внимание, что арифметика с плавающей запятой склонна к ошибкам округления, поэтому вам следует проверить, что абсолютное значение b меньше некоторой дельты, а нечем это равно 0,0.Я предполагаю, что именно поэтому сопоставление с образцами не допускается.

6 голосов
/ 04 июля 2010

Возможно, это потому, что real не является eqtype в SML 97: http://www.smlnj.org/doc/Conversion/types.html#Real-equality

...