这
- 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
我跟着Programming in Standard ML走了,49页。不确定如何继续。
发布于 2020-04-06 06:54:21
我猜你已经碰到this bug了。我建议您恢复到编译器的早期版本(您的程序在110.91上对我有效),然后重试。
发布于 2020-04-06 05:37:10
编辑:我回应说,这个库函数被称为Real.abs
,而不是Math.abs
,并指出它可以处理自定义abs
函数不能处理的几种情况(±infinity,±0.0,±NaN)。
但是,如果您想尝试让您自己的abs
函数工作,我已经尝试在SML/NJ 110.79 (apt install smlnj
)、Poly/ML 5.7.1 (apt install polyml
)和莫斯科ML 2.10 (http://try.mosml.org)中运行您的程序,但没有得到错误。也许你正在运行一个flakey版本,或者你遇到了64位的问题?
https://stackoverflow.com/questions/61048939
复制相似问题