2012-08-06 3 views
1

목록을 사용하지 않고 문자열 목록에 문자열을 추가하는 방법 : append(). 목록을 사용하는 코드 : append()가 여기에 있습니다. 어떻게하면 목록 완성을 사용하여 을 수행 할 수 있습니까?Erlang의 문자열 목록에 문자열 추가

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

마지막 줄은 어떻게 사용 지능형리스트를 수행하는 결과

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

를 얻을? 얼랑 문서에서

+0

그 이유는 무엇입니까? –

답변

2

봐 : http://www.erlang.org/doc/efficiency_guide/listHandling.html

가 말했듯이 - 그것은 새 목록의 생성 원인 때문에리스트의 꼬리에 요소를 추가는 비효율적이다.

목록의 꼬리에 요소를 추가해야하는 경우 더 좋은 방법은 목록을 역순으로 작성하는 것입니다. 그리고 결국 단지 기능 목록을 호출이 예에서/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 인스턴스