2

lists:append() を使用せずに、文字列のリストに文字列を追加するにはどうすればよいですか。list:append() を使用したコードはこちらですが、リスト内包表記を使用して同じことを行う方法は?

S1 = "String1" . 
S2 = "String2" . 
S3 = "String3" . 
L1 = [ S1, S2 ] . 
L2 = lists:append(L1,[S3]).

最後の行は結果をもたらします

["String1","String2","String3"]

リスト内包表記を使用してこれを行う方法は?

4

1 に答える 1

3

Erlang のドキュメントを参照してください: http://www.erlang.org/doc/efficiency_guide/listHandling.html

そこで言われたように、リストの末尾に要素を追加すると、新しいリストが作成されるため、非効率的です。

リストの末尾に要素を追加する必要がある場合は、逆の順序でリストを作成することをお勧めします。そして最後に関数リストを呼び出すだけです:reverse/1

この例を見てください:

18> S1 = "String1". 
"String1"
19> S2 = "String2". 
"String2"
20> S3 = "String3". 
"String3"
21> S4 = "String4". 
"String4"
22> L1 = [ S2, S1 ].
["String2","String1"]
23> L2 = [ S3 | L1 ].
["String3","String2","String1"]
24> L3 = [ S4 | L2 ].
["String4","String3","String2","String1"]
25> L4 = lists:reverse( L3 ).
["String1","String2","String3","String4"]

これは、次のものよりもメモリ使用効率が高くなります。

34> S1 = "String1". 
"String1"
35> S2 = "String2". 
"String2"
36> S3 = "String3". 
"String3"
37> S4 = "String4". 
"String4"
38> L1 = [ S1, S2 ].
["String1","String2"]
39> L2 = L1 ++ [ S3 ].
["String1","String2","String3"]
40> L3 = L2 ++ [ S4 ].
["String1","String2","String3","String4"]

( '++' の使用は、リスト:append と同等です)。

最初の例では、リストのインスタンスが 2 つだけ作成されています。そして2番目に-3つのインスタンス。より大きな例では、結果は2 つのリスト インスタンスと N-1 インスタンスになるはずです

于 2012-08-06T12:42:44.220 に答える