执行Erlang脚本时抛出“init终止于do_boot”

时间:2015-05-07 03:37:08

标签: erlang erlang-shell

这是我在'factorial.erl'中的代码:

rand

在提示符中交互此代码时,它可以正常工作:

-module(factorial).
-author("jasonzhu").

%% API
-export([fac/1]).

fac(0) -> 1;
fac(N) -> N * fac(N-1).

但是如果我从命令行编译并执行它,就会发生一些错误。

1> c(factorial).
{ok,factorial}
2> factorial:fac(20).
2432902008176640000

有人可以帮帮我吗?我是Erlang的新手,非常感谢!

2 个答案:

答案 0 :(得分:3)

-noshell语法是

erl -noshell -s Module Function Arguments

其中Arguments是一个原子列表。所以你必须从列表中获取'fac'参数并将其转换为整数。

-module(factorial).

-export([fac/1]).

fac([N]) ->
    X = fac(list_to_integer(atom_to_list(N))),
    io:format("~p~n", [X]);
fac(0) -> 1;
fac(N) -> N * fac(N-1).

作品

>>> erl -noshell -s factorial fac 20 -s init stop
2432902008176640000

答案 1 :(得分:0)

此选项并非特定于 OP 的问题,只是可能对来自“init terminating in do_boot”搜索以及官方文档 How to Interpret the Erlang Crash Dumps

的人有用

如果您的代码已经放置了一段时间并且您再次开始使用它,重新编译可能会使此错误消失

  1. 删除_build/目录
  2. 删除 rebar.lock 文件
  3. 编译/dir_with_rebarconfig$ rebar3 release