Functional programming 关于Erlang中未使用变量的警告

Functional programming 关于Erlang中未使用变量的警告,functional-programming,erlang,Functional Programming,Erlang,我最近启动了Erlang,我注意到我在编译时不断收到“警告:变量X未使用”。例如,使用以下函数查找列表中的最大元素: max([Head|Tail]) -> max(Head,Tail). max(Element,[Head | Tail]) when Element < Head -> max(Head,Tail); max(Element,[Head | Tail]) -> max(Element,

我最近启动了Erlang,我注意到我在编译时不断收到“警告:变量X未使用”。例如,使用以下函数查找列表中的最大元素:

    max([Head|Tail]) ->
       max(Head,Tail).

    max(Element,[Head | Tail]) when Element < Head ->
       max(Head,Tail);
    max(Element,[Head | Tail]) ->
       max(Element, Tail);
    max(Element,[]) ->
       Element.
max([Head | Tail])->
最大值(头、尾)。
当元素
最大值(头、尾);
最大值(元素[Head | Tail])->
最大值(元素,尾部);
最大值(元素,[])->
元素。

编译器警告我,在函数的第三种情况下,Head未使用。如何在没有Head的情况下编写函数?

这将抑制警告,而不会造成混淆:

max(Element,[_Head | Tail]) ->
   max(Element, Tail);
max([Head | Tail])->
最大值(头、尾)。
当元素
最大值(头、尾);
最大值(元素,[|尾])->
最大值(元素,尾部);
最大值(元素,[])->
元素。

我们应该做到这一点。原因是,将“Head”替换为“\u”是表示参数将被放置在那里的语法,但我不需要它。

如果您将变量命名为
\u
,而不是
(例如
\ucode>而不是
Head
),则变量将不会被绑定,并且您不会收到警告


如果您将变量命名为
\u name
而不是
name
(例如
\u Head
而不是
Head
),变量将被绑定,但您仍然不会收到警告。在代码中引用以
开头的变量被认为是非常糟糕的做法


建议保留变量的名称以提高代码的可读性(例如,猜测
\u Head
的目的比猜测
\u
更容易)。

您的最后两句话相互矛盾。我怀疑在这种情况下,“使用”意味着“使用绑定到的值”,而不是“使用名称结构”。使用“使用变量”是指在代码中引用它,“使用变量名”是指给它命名。
    max([Head|Tail]) ->
       max(Head,Tail).

    max(Element,[Head | Tail]) when Element < Head ->
       max(Head,Tail);
    max(Element,[_| Tail]) ->
       max(Element, Tail);
    max(Element,[]) ->
       Element.