执行Erlang脚本时引发“初始化终止于do_boot”

Jud*_*ing 1 erlang erlang-shell

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

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

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

fac(0) -> 1;
fac(N) -> N * fac(N-1).
Run Code Online (Sandbox Code Playgroud)

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

1> c(factorial).
{ok,factorial}
2> factorial:fac(20).
2432902008176640000
Run Code Online (Sandbox Code Playgroud)

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

Jasons-MacBook-Pro:src jasonzhu$ erlc factorial.erl 
Jasons-MacBook-Pro:src jasonzhu$ erl -noshell -s factorial fac 20 -s init stop
{"init terminating in do_boot",{badarith,[{factorial,fac,1,[{file,"factorial.erl"},{line,8}]},{init,start_it,1,[]},{init,start_em,1,[]}]}}

Crash dump was written to: erl_crash.dump
init terminating in do_boot ()
Run Code Online (Sandbox Code Playgroud)

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

P_A*_*P_A 5

-noshell语法是

erl -noshell -s Module Function Arguments
Run Code Online (Sandbox Code Playgroud)

其中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).
Run Code Online (Sandbox Code Playgroud)

作品

>>> erl -noshell -s factorial fac 20 -s init stop
2432902008176640000
Run Code Online (Sandbox Code Playgroud)