【发布时间】:2017-09-16 02:34:15
【问题描述】:
我在 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
Basis 库中的其他函数产生同样的错误,例如Real.fromInt
this answer 上的 cmets 指出了类似的问题,但我不知道如何继续。
我错过了一些简单的东西吗?谢谢!
编辑:
卸载并重新安装几次后,似乎可以正常工作。因为我真的不知道是什么让它真正起作用..
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
【问题讨论】:
-
您的问题应该是关于 SML/NJ 在 Windows 上无法正常工作的问题。正如您自己所说,它与 List.filter 几乎没有关系。
-
你说得对,我把问题改写了一下
-
也许您可以尝试直接使用 Windows 安装程序,而不是通过 Cygwin(如果这不会对您的代码库造成太大困难)。这可能更像是 Cygwin 与 Windows 10 的问题,而不是 SML/NJ 与 Windows 10 的问题。
-
我很确定这就是我所做的。我刚从这里直接得到
.msismlnj.org/dist/working/110.79/index.html -
我的评论基于在您提供的错误消息中看到 Cygwin。我在 110.79 上使用了 Windows 安装程序(在 Windows 7 上,而不是 10 上)并且没有问题——但在 Cygwin 目录上没有安装任何东西(我的机器上什至没有 Cygwin)。我想知道如果安装程序检测到 Cygwin,它是否会做一些不同的事情。如果您选择了该目录——也许卸载然后使用安装程序建议的默认目录重新安装。如果情况变得更糟,您可以尝试按照以下说明从源代码编译:smlnj.org/dist/working/110.79/WININSTALL