SML выдает ошибку компилятора - PullRequest
0 голосов
/ 05 апреля 2020

Это

- fun dist (x:real, y:real):real*real = (Math.sqrt (x*x+y*y), Math.abs(x-y));

выдает ошибку

Error: unbound variable or constructor: abs in path Math.abs

Так что даже с самодельной версией abs я получаю

- fun abs (n : real)  = if n <0.0 then ~n else n;
val abs = fn : real -> real
- fun dist (x:real, y:real) = (Math.sqrt (x*x + y*y), abs (x-y));
val dist = fn : real * real -> real * real
- dist (2.0, 3.0);
Error: Compiler bug: PPObj: ppFields in ppval.sml

Я был далее в Программирование в стандарте ML , стр. 49. Не знаете, как действовать.

Ответы [ 2 ]

1 голос
/ 06 апреля 2020

Полагаю, вы столкнулись с этой ошибкой . Я предлагаю вам вернуться к более ранней версии компилятора (ваша программа работает для меня на 110.91) и попробовать снова.

0 голосов
/ 06 апреля 2020

Редактировать: Я ответил, что библиотечная функция называется Real.abs, а не Math.abs, и отметил, что она обрабатывает несколько угловых случаев (± бесконечность, ± 0,0, ± NaN), что ваша пользовательская функция abs не работает.

Если, однако, вы хотите попробовать и заставить работать свою собственную функцию abs, я попытался запустить вашу программу в SML / NJ 110,79 (apt install smlnj), Poly / ML 5.7.1 (apt install polyml) и Moscow ML 2,10 (http://try.mosml.org) без ошибок. Возможно, у вас нестабильная версия или у вас 64-битные проблемы?

...