SML/NJ未在Mac上自动加载Basis库

SML/NJ未在Mac上自动加载Basis库,sml,smlnj,Sml,Smlnj,当我尝试使用函数List.nth时,sml shell返回以下错误消息: - List.nth([1,2,3],0); [autoloading] unexpected exception (bug?) in SML/NJ: Io [Io: openIn failed on "/Users/jhr/Work/smlnj/osx-dist/smlnj.dst/sml.boot.x86-unix/smlnj/basis/.cm/x86-unix/basis.cm", No such file or

当我尝试使用函数
List.nth
时,sml shell返回以下错误消息:

- List.nth([1,2,3],0);
[autoloading]

unexpected exception (bug?) in SML/NJ: Io [Io: openIn failed on "/Users/jhr/Work/smlnj/osx-dist/smlnj.dst/sml.boot.x86-unix/smlnj/basis/.cm/x86-unix/basis.cm", No such file or directory]
raised at: Basis/Implementation/IO/bin-io-fn.sml:617.25-617.71
         ../cm/util/safeio.sml:30.11
         ../compiler/TopLevel/interact/evalloop.sml:42.54
如果我在不使用
列表的情况下使用
nth
,它将返回相同的错误消息。
。 因此,我可以猜测“自动加载”库有问题

但还有一些奇怪的事情。 如果我使用另一个basis库函数
length
,它可以正常工作。像这样:

- length ([1,2,3]);
val it = 3 : int
- List.length([1,2,3]);
[autoloading]

unexpected exception (bug?) in SML/NJ: Io [Io: openIn failed on "/Users/jhr/Work/smlnj/osx-dist/smlnj.dst/sml.boot.x86-unix/smlnj/basis/.cm/x86-unix/basis.cm", No such file or directory]
 raised at: Basis/Implementation/IO/bin-io-fn.sml:617.25-617.71
         ../cm/util/safeio.sml:30.11
         ../compiler/TopLevel/interact/evalloop.sml:42.54
但是如果我使用
List.length
,会怎么样?它会出错。像这样:

- length ([1,2,3]);
val it = 3 : int
- List.length([1,2,3]);
[autoloading]

unexpected exception (bug?) in SML/NJ: Io [Io: openIn failed on "/Users/jhr/Work/smlnj/osx-dist/smlnj.dst/sml.boot.x86-unix/smlnj/basis/.cm/x86-unix/basis.cm", No such file or directory]
 raised at: Basis/Implementation/IO/bin-io-fn.sml:617.25-617.71
         ../cm/util/safeio.sml:30.11
         ../compiler/TopLevel/interact/evalloop.sml:42.54
所以看起来“自动加载”的东西肯定有问题,但我不知道如何修复它。 请帮我找到问题并解决它

注:

  • 我使用MaxOSX10.13.3和v110.81的SML/NJ编译器
  • 路径中的“jhr”是前面的“用户名”。我改成了“华彩乐章”。这就是为什么这条道路不存在的原因。“用户”目录中有“华彩乐章”目录

  • 注:在上一版本和本版本(v110.81)之间,编译器本身的目录结构可能有问题。

    您是如何在Mac上安装SML/NJ的

    编译器似乎驻留在用户拥有的目录中;我建议您按照说明尝试通过自制软件安装SML/NJ:

    $ ruby <(curl -fsSk https://raw.github.com/mxcl/homebrew/go)
    $ brew update
    $ brew install smlnj
    

    $ruby如果您遇到此问题,并且无法通过使用自制软件进行安装来解决,请尝试将环境变量
    SMLHOME\u DIR
    设置为安装目录。这可能会解决一些“未找到文件”错误

    例如:

    % pwd /usr/local/smlnj % ls MLRISC/ bin/ cml/ doc/ ml-burg/ ml-lpt/ nlffi/ smlnj-lib/ license.html base/ ckit/ config/ lib/ ml-lex/ ml-yacc/ null trace-debug-profile/ % export SMLNJ_HOME=/usr/local/smlnj/ %pwd /usr/本地/smlnj %ls MLRISC/bin/cml/doc/ml burg/ml lpt/nlffi/smlnj lib/license.html base/ckit/config/lib/ml lex/ml yacc/null跟踪调试配置文件/ %导出SMLNJ_HOME=/usr/local/SMLNJ/
    然后,您可以将其添加到
    .zshrc
    等中。

    我通过导出SML MacOS安装文档中提到的
    SMLNJ_HOME
    解决了同样的问题

    执行:

    echo'export SMLNJ_HOME=“/usr/local/SMLNJ”>>$HOME/.bash_profile

    然后,将其源代码添加到当前的命令行环境中:

    source$HOME/.bash\u配置文件

    然后,SML能够从核心库加载额外的函数:

    Standard ML of New Jersey v110.79 [built: Sun Oct  4 14:45:06 2015]
    - List.nth;
    [autoloading]
    [library $SMLNJ-BASIS/basis.cm is stable]
    [library $SMLNJ-BASIS/(basis.cm):basis-common.cm is stable]
    [autoloading done]
    val it = fn : 'a list * int -> 'a
    

    事实上,我遇到了在MacOS上检测不到操作系统的问题,但我通过谷歌搜索解决了这个问题,谢天谢地。顺便说一下,我当前的用户名以“c”而不是“c”开头,所以我想知道这是否是没有检测到用户目录的问题。我想我应该删除SML/NJ并重新安装。哦,我写的用户目录名是‘C’adenzah。那是我的错误。很抱歉。SML/NJ是以老式方式捆绑的。这使得从头开始安装变得很困难。幸运的是,大多数操作系统包管理器都会为您做一些难看的事情,包括自制软件。给我一个好提示!必须用软件包管理器重新安装。非常感谢。