6

最近 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.

コンパイラは、関数の 3 番目のケースでは Head が使用されていないことを警告します。ヘッドなしでどのように関数を書くことができますか?

4

3 に答える 3

10

_の代わりにName(たとえば_の代わりに)変数に名前を付けると、変数Headはバインドされず、警告も表示されません。

_Nameの代わりにName(たとえば_Headの代わりにHead)変数に名前を付けると、変数バインドされますが、それでも警告は表示されません。_コード内で で始まる変数を参照することは、非常に悪い習慣と見なされます。

コードの可読性を向上させるために、変数の名前を保持することをお勧めします (たとえば_Head、単に_.

于 2008-12-14T19:39:28.857 に答える
9

これにより、混乱することなく警告が抑制されます。

max(Element,[_Head | Tail]) ->
   max(Element, Tail);
于 2008-12-06T02:45:19.217 に答える
6
    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.

トリックを行う必要があります。その理由は、「Head」を「_」に置き換えるのは、そこにパラメーターが配置されるという構文ですが、私はそれを必要としません。

于 2008-12-06T02:47:32.317 に答える