5

私はいくつかの要素を含むリストを持っていますが、今ではlists:foreachいくつかのレコードを取得しています.配列を使用して他の言語で行うように、新しい変数を作成せずに既存のリスト要素に各値を追加したいと考えています.

ここに私が得ている私のサンプルコードがあります:

exception error: no match of right hand side value [6,7,1].

サンプルコード:

listappend() ->
    A = [1,2,3,4,5],
    B = [6,7],
    lists:foreach(fun (ListA) ->
        B = lists:append(B, [ListA])                       
        end, A),
    B.

次のような出力が必要です。

B = [6,7,1,2,3,4,5].
4

2 に答える 2

7

まず、この機能は既に存在するため、自分で実装する必要はありません。実際、リストは引数として 2 つのリストを取ることができます。

1> lists:append([1,2,3,4,5], [6,7]).
[1,2,3,4,5,6,7]

実際には次のように実装されています。

2> [1,2,3,4,5] ++ [6,7]. 
[1,2,3,4,5,6,7]

++ 演算子は左側のオペランドをコピーするため、この操作は簡単に 2 次複雑になることに注意してください。おそらく、「cons」演算子を使用してリストを作成することをお勧めします (最終的には、計算の最後でリストを逆にします)。

3> [1|[2,3,4,5,6,7]].
[1,2,3,4,5,6,7]

いずれの場合でも、関数の本体で定義する代わりに、追加する 2 つのリストである 2 つの引数を関数に含めることができます。このように、関数を呼び出すたびに A と B の値が変化しmy_append/2ます。

my_append(A, B) ->
  YOUR_CODE_GOES_HERE

注意として、実際に発生しているエラーに関しては、これは次の行によるものです。

B = lists:append(B, [ListA])

各反復中に、B既に value にバインドされている variable に新しい値をバインドしています[6,7]

于 2012-04-16T07:46:39.093 に答える