【问题标题】:SML/NJ Basis Library not working in Windows 10SML/NJ 基础库在 Windows 10 中不起作用
【发布时间】: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 的问题。
  • 我很确定这就是我所做的。我刚从这里直接得到.msi smlnj.org/dist/working/110.79/index.html
  • 我的评论基于在您提供的错误消息中看到 Cygwin。我在 110.79 上使用了 Windows 安装程序(在 Windows 7 上,而不是 10 上)并且没有问题——但在 Cygwin 目录上没有安装任何东西(我的机器上什至没有 Cygwin)。我想知道如果安装程序检测到 Cygwin,它是否会做一些不同的事情。如果您选择了该目录——也许卸载然后使用安装程序建议的默认目录重新安装。如果情况变得更糟,您可以尝试按照以下说明从源代码编译:smlnj.org/dist/working/110.79/WININSTALL

标签: sml smlnj


【解决方案1】:

当安装目录被移动或 SMLNJ 主环境未设置时会发生这种情况。基本上 sml 无法找到 basic.cm 文件,该文件应该存在于 $SMLNJ_HOME 子目录中。因此,通过在 $SMLNJ_HOME 中设置安装路径为我解决了这个问题。

  $SMLNJ_HOME=~/ws/CSCI-5161/sml

【讨论】:

    【解决方案2】:

    我在 Windows 7 上,但遇到了同样的错误。 Windows 安装程序将程序放在 Program Files(x86)/SMLNJ 中。我将 SMLNJ 文件夹移至 Program Files/,现在不再出现错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-19
      • 1970-01-01
      • 1970-01-01
      • 2010-09-16
      • 2016-04-06
      • 2012-08-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多