Compiler errors SML产生编译器错误

Compiler errors SML产生编译器错误,compiler-errors,sml,Compiler Errors,Sml,这个 产生错误 - fun dist (x:real, y:real):real*real = (Math.sqrt (x*x+y*y), Math.abs(x-y)); 因此,即使使用自制版本的abs Error: unbound variable or constructor: abs in path Math.abs -fun abs(n:real)=如果n real -趣味区(x:real,y:real)=(Math.sqrt(x*x+y*y),abs(x-y)); val dist

这个

产生错误

- fun dist (x:real, y:real):real*real = (Math.sqrt (x*x+y*y), Math.abs(x-y));
因此,即使使用自制版本的
abs

Error: unbound variable or constructor: abs in path Math.abs
-fun abs(n:real)=如果n real
-趣味区(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);
错误:编译器错误:ppval.sml中的PPObj:ppFields

我在第49页的第二页跟着。不确定如何继续。

编辑:我回答说调用了库函数,而不是
Math.abs
,并指出它可以处理您的自定义
abs
函数无法处理的几个角点情况(±无穷大,±0.0,±NaN)


但是,如果您想尝试使用自己的
abs
函数,我已经尝试在SML/NJ 110.79(
apt install smlnj
)、Poly/ML 5.7.1(
apt install polyml
)和Moscow ML 2.10()中运行您的程序,但没有遇到错误。也许您正在运行一个片状版本,或者您遇到了64位问题?

我猜您遇到了。我建议您恢复到早期版本的编译器(您的程序在110.91上为我工作),然后再试一次。

谢谢您的建议,但遗憾的是,我对猫过敏,猫可能很可爱。仍然有错误,虽然…是的,这一定是一个错误。适用于poly。您使用的SML编译器是什么?哪个版本?根据“最新版本是110.96;我们相信这个版本是稳定的,但是有很多低级更改可能会引入错误,因此如果您的系统有任何问题,您应该报告它们,然后恢复到110.87。”但我可能会坚持使用110.79,因为它可以在Debian/Ubuntu的包存储库中预编译。我的SML是110.96。无法运行我以前的SMLs。。。投诉
~/opt/sml110.85/bin/.run/run.x86-linux:未找到
时,它就在那里…这可能是另一个问题。您是否尝试
ldd~/opt/sml110.85/bin/.run/run.x86-linux:未找到
?无论如何,这个问题可能不是讨论这个问题的合适地方。
- 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