2012-02-28 2 views
1

왜 얼랑에리스트를 생성 할 수있는 다음 두 표현식이 다른 결과를 반환합니까?얼랭 목록 생성

> ["A" | []] 
// returns ["A"] 
> [[] | "A"] 
// returns [[], 65] 

두 번째 표현식이 첫 번째 표현식과 동일한 결과를 반환 할 것으로 예상했습니다. 아무도 왜 이런 일이 일어날 지 설명 할 수 있습니까?

답변

8

제대로 모든 표현이 패턴을 따르는 것을 명심이 작동 방식을 이해합니다.

또한 문자열은 문자 목록입니다. 즉, "A"은 실제로 [65]과 같습니다.

따라서 첫 번째 경우 머리가 "A"이고 꼬리가 [] 인 목록이 만들어지고 예상대로 ["A"]이됩니다.

그러나 두 번째 경우에 머리는 []이고 꼬리는 "A"이며 이는 [65]과 같습니다. 따라서 결과는 head 요소 ([])와 꼬리의 모든 요소 (65)입니다.

+0

+1, 내 것보다 더 나은 설명. –

+0

@larsmans 감사합니다. 귀하의 의견에 감사드립니다. – jcollado

2

나는 왜 그들이 같아야하는지 알지 못합니다. 당신은 [A|B] 서로 연결하여 AB이 나열되어 생각 될 수 있지만 그렇지 않습니다 : 목록B요소A 앞에 추가하는 것을 의미합니다.

["A" | []]는 단일 요소로서 "A"하여 목록에 대응하는 두 번째, 제로서의 원소로서 "A"[]를 갖는 순서쌍이다.

[[] | "A"]은 첫 번째 요소가 []이고 두 번째 요소가 "A" 인 순서가 지정된 쌍입니다. 문자열은 실제로 Erlang의 ASCII 코드 목록이므로 []65 (ASCII A)을 요소로 포함하는 목록과 같습니다. 목록의 첫 번째 요소는 그 자체가 목록이므로 중첩 된 목록입니다.

[head | tail] 
head가 하나의 요소이다

와 꼬리가 다른 목록입니다