私はを学習中です。、そして末尾再帰についての議論では、著者はtail_fac/1
とtail_fac/2
の2つの関数を定義しています。この本は、tail_fac/1
のみを輸出すると述べています。どのように関数を定義するのですか?この場合、tail_fac/2
をエクスポートせずにどうしますか?関数を定義するために私が知っている唯一の方法は-export([func_name/args])
です。関数をエクスポートせずに定義するにはどうすればいいですか?
私はコードスニペットを実行しよう:
tail_fac(N) -> tail_fac(N,1).
tail_fac(0,Acc) -> Acc;
tail_fac(N,Acc) when N > 0 -> tail_fac(N-1,N*Acc).
私リンターはtail_fac/2
私は輸出でそれを定義しようとした場合でも、未定義であることを述べています。
最初の関数宣言の最後にドットを挿入しないでください。同名の関数はセミコロンで区切らなければなりません。 Erlangは、 "tail_fac"という名前の関数が1つしかないと考えています。 – Alex
@Alex関数名は同じ名前で同じアリティを持つが、同じ名前と異なるアリティを持つ関数がドットで区切られている場合、関数節はセミコロンで区切らなければなりません。だから、このコードは私にとっては完璧に見えます。私はこのコードをコンパイルし、tail_fac/1をテストしました。それはそのまま正常に動作するようです。 –
さて、私は間違っていた。 – Alex