13

再帰関数を記述して、リストに要素がある場合に実行されるfnと、リストが空の場合に実行されるfnが必要です。

 transfer(Master, [H|Tail]) ->
  Master ! {transfer, H},
  transfer(Master, Tail).

transfer(_Master, []) ->
  nil.

私が得ている問題はですsrc/redis/redis_worker.erl:13: function transfer/2 already defined。同じ名前とアリティを持つ2つの機能に腹を立てていることは理解していますが、これら2つは異なるはずです。

4

2 に答える 2

31

問題は、関数の句をピリオドではなくセミコロンで区切る必要があることです。

transfer(Master, [H|Tail]) ->
    Master ! {transfer, H},
    transfer(Master, Tail); % use semicolon here, not period

transfer(_Master, []) ->
    nil.

ピリオドを使用して句を終了すると、コンパイラはその関数の定義が完了したと見なすため、コードは同じ関数の異なる句ではなく、2つの別個の関数と見なされます。

詳細については、関数宣言構文のErlangリファレンスを参照してください。

于 2012-10-10T17:31:43.637 に答える
4

2つの関数句を区切るには、コロンの代わりにセミコロンを使用する必要があります。

于 2012-10-10T17:30:04.793 に答える