„init terminating in do_boot” este aruncat atunci când se execută un script Erlang (Programare, Erlang, Erlang Shell)

Judecând a intrebat.

Iată codul meu în ‘factorial.erl’:

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

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

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

Când interacționez cu acest cod în prompt, funcționează bine:

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

Dar dacă îl compilez și îl execut din linia de comandă, au apărut unele erori.

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 ()

Mă poate ajuta cineva? Sunt începător în Erlang, multe mulțumiri!

1 răspunsuri
P_A

Sintaxa -noshell este

erl -noshell -s Module Function Arguments

unde Arguments este o listă de atomi. Deci, trebuie să obțineți argumentul ‘fac’ din listă și să-l convertiți în număr întreg.

Acest lucru

-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).

funcționează

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