我在Windows 10上使用最新版本的SMLNJ(110.79)。
我似乎无法使用任何SML Basis Library函数。
以下是我尝试使用List.filter
fun isOdd nmbr = (nmbr mod 2) = 1;
List.filter isOdd [1,2,3,4,5];
这会产生以下错误
SML / NJ中的意外异常(bug?):Io [Io:openIn failed on" C:\ cygwin \ home \ larsberg \ smlnj2 \ sml.boot.x86-win32 \ smlnj \ basis.cm \ x86-win32 \ basis.cm",win32-bin-prim-io:checkHndl:openRd:failed] 提出于:Basis / Implementation / IO / bin-io-fn.sml:617.25-617.71 ../cm/util/safeio.sml:30.11 ../编译器/顶层/交互/ evalloop.sml:44.55
Basis库中的其他函数会产生相同的错误,例如Real.fromInt
关于this answer的评论指出了类似的问题,但我不确定如何继续。
我错过了一些简单的东西吗?谢谢!
编辑:
卸载并重新安装几次后,似乎正常工作。我暂时不开这个问题,因为我真的不知道是什么让它真正起作用。
List.filter;
提供了此输出
[autoloading]
[library $SMLNJ-BASIS/basis.cm is stable]
[library $SMLNJ-BASIS/(basis.cm):basis-common.cm is stable]
[autoloading done]
val it = fn : ('a -> bool) -> 'a list -> 'a list
答案 0 :(得分:2)
当移动安装的目录或未设置SMLNJ主环境时,会发生这种情况。基本上sml无法找到basis.cm文件,该文件应存在于$ SMLNJ_HOME子目录中。因此,通过在 $ SMLNJ_HOME 中设置安装路径解决了我的问题。
$SMLNJ_HOME=~/ws/CSCI-5161/sml
答案 1 :(得分:0)
我在Windows 7上但是遇到了同样的错误。 Windows安装程序将程序放在Program Files(x86)/ SMLNJ中。我将SMLNJ文件夹移动到Program Files /,现在不再收到错误。