2009-12-07 18 views
8

可変長の引数リストで関数を定義することはできますか?Erlangの可変長引数リストのリスト

は、私はちょうど書くことができます知っている:

function() -> function([]). 
function(X) when not is_list(X) -> function([X]); 
function(X) -> do_something_with_arguments(X). 

しかし、私はこのテクニックを避けたいです。

答えて

8

それを行うための1つの方法は、リスト内のすべての引数を渡すことです:

function(ListOfParameters)

とあなたが言ったListOfParametersを反復処理することができます。このようにして、関数宣言に任意の数の「パラメータ」を受け入れることができます。宣言に用語を追加するだけですが、それがあなたが望んでいたものかどうかはわかりません。あなたはC varargパラメータリストの行に沿って考えていますか?肯定的な場合は、次の段落を読んでください。

Erlangはパターンマッチングに基づいています。関数 "宣言"の引数は、関数が呼び出されたときに一致するパターンとして機能します。あなたは完全にErlangの力を利用するために、に "手続きプログラミング"の考え方を残さなければならないでしょう。

+0

あなたの答えの最初の部分は、私が言及したテクニックと同じです、私はCと似たようなことを考えましたので、私は第二の部分を読むので、今私は最初の解決策に落ちなければなりません。レスポンスありがとう! –

+0

私の喜び! Erlangとお楽しみください! – jldupont

+0

引数の変数リストが必要な場合は、これを行うのが最善でしょうし、引数の変数リストをこの他の関数に渡して別の関数を実行する必要がありますか? – CMCDragonkai

8

@ jldupontよりもはっきりしています:いいえ!

実装されていないだけでなく、同じ名前のErlang関数では引数の数が異なるため、異なる関数とみなされて追加できません。

+0

引数のリストを分割し、各引数を関数に適用する方法はありますか? – CMCDragonkai

+0

@CMCDragonkai同じ要素を各要素に適用することを意味しますか?その使用のためには、結果リストを返すために 'lists:map'かlist comprehensions;リスト内の次の要素への呼び出しに戻り値をフォールドする 'lists:foldl' – rvirding

+0

実際に引数のリストが与えられたら、別の関数を呼び出してそのリストを引数の集合として渡したいと思います。エリクシルには、「適用」があります。 – CMCDragonkai

関連する問題