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