1. ホーム
  2. erlang

[解決済み] Erlang スクリプトの実行時に "init terminating in do_boot" がスローされる。

2022-02-14 15:45:04

質問

以下は、'factorial.erl' にある私のコードです。

-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

しかし、コンパイルしてコマンドラインから実行すると、いくつかのエラーが発生しました。

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

どなたか助けていただけませんか?私はErlangの初心者です、よろしくお願いします。

どのように解決するのですか?

-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