当我尝试使用函数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
而不使用List.
,则会返回相同的错误消息。
所以我可以猜测自动加载'是否存在问题。图书馆。
但是还有一些奇怪的事情。
如果我使用另一个基础库函数length
,它可以正常工作。像这样:
- length ([1,2,3]);
val it = 3 : int
但是如果我使用List.length
怎么办?它会出错。像这样:
- 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
因此,自动加载'东西,但我无法弄清楚如何解决它。 请帮我找到问题并修理它!
注意:
PS。也许在先前版本和此版本(v110.81)之间编译器本身的目录结构存在问题?
答案 0 :(得分:1)
你是如何在Mac上安装SML / NJ的?
编译器似乎驻留在用户拥有的目录中;我建议您尝试通过Homebrew安装SML / NJ作为this blog post指示:
$ ruby <(curl -fsSk https://raw.github.com/mxcl/homebrew/go)
$ brew update
$ brew install smlnj
由于您并未询问如何安装SML / NJ,因此这不是以下问题的重复:
但也许你应该问这个问题而不是这个问题。 :)
否则,请尝试将当前用户名设置为&#39; Cadenzah&#39;而不是&#39; cadenzah&#39;所以它匹配您的用户目录的大小写。 Unix文件系统往往区分大小写。
答案 1 :(得分:0)
如果遇到此问题,但无法通过使用自制程序来解决,请尝试将环境变量SMLHOME_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/
然后可以将其添加到.zshrc
等中。
答案 2 :(得分:0)
我通过导出 SML 的 MacOS 安装文档中提到的 SMLNJ_HOME
解决了同样的问题。
执行:
echo 'export SMLNJ_HOME="/usr/local/smlnj"' >> $HOME/.bash_profile
然后,将其输入到您当前的命令行环境中:
source $HOME/.bash_profile
然后 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