Erlang函数已使用guard子句定义

Erlang函数已使用guard子句定义,erlang,Erlang,在编写递归函数时,我希望一个fn在列表包含元素时执行,另一个fn在列表为空时执行: transfer(Master, [H|Tail]) -> Master ! {transfer, H}, transfer(Master, Tail). transfer(_Master, []) -> nil. 我遇到的问题是src/redis/redis\u worker.erl:13:function transfer/2已经定义了。我理解有人对两个名称和算术相同的函数感到不

在编写递归函数时,我希望一个fn在列表包含元素时执行,另一个fn在列表为空时执行:

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

transfer(_Master, []) ->
  nil.

我遇到的问题是
src/redis/redis\u worker.erl:13:function transfer/2已经定义了
。我理解有人对两个名称和算术相同的函数感到不安,但这两个函数应该不同。

你需要用分号而不是冒号来分隔这两个函数子句。

问题是函数的子句需要用分号而不是句号来分隔

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

transfer(_Master, []) ->
    nil.
当使用句点终止子句时,编译器认为该函数的定义是完整的,因此它将代码视为两个独立的函数,而不是同一函数的不同子句

有关更多详细信息,请参阅Erlang参考