왜 얼랑에리스트를 생성 할 수있는 다음 두 표현식이 다른 결과를 반환합니까?얼랭 목록 생성
> ["A" | []]
// returns ["A"]
> [[] | "A"]
// returns [[], 65]
두 번째 표현식이 첫 번째 표현식과 동일한 결과를 반환 할 것으로 예상했습니다. 아무도 왜 이런 일이 일어날 지 설명 할 수 있습니까?
왜 얼랑에리스트를 생성 할 수있는 다음 두 표현식이 다른 결과를 반환합니까?얼랭 목록 생성
> ["A" | []]
// returns ["A"]
> [[] | "A"]
// returns [[], 65]
두 번째 표현식이 첫 번째 표현식과 동일한 결과를 반환 할 것으로 예상했습니다. 아무도 왜 이런 일이 일어날 지 설명 할 수 있습니까?
제대로 모든 표현이 패턴을 따르는 것을 명심이 작동 방식을 이해합니다.
또한 문자열은 문자 목록입니다. 즉, "A"
은 실제로 [65]
과 같습니다.
따라서 첫 번째 경우 머리가 "A"
이고 꼬리가 []
인 목록이 만들어지고 예상대로 ["A"]
이됩니다.
그러나 두 번째 경우에 머리는 []
이고 꼬리는 "A"
이며 이는 [65]
과 같습니다. 따라서 결과는 head 요소 ([]
)와 꼬리의 모든 요소 (65
)입니다.
나는 왜 그들이 같아야하는지 알지 못합니다. 당신은 [A|B]
서로 연결하여 A
및 B
이 나열되어 생각 될 수 있지만 그렇지 않습니다 : 목록B
에 요소A
앞에 추가하는 것을 의미합니다.
["A" | []]
는 단일 요소로서 "A"
하여 목록에 대응하는 두 번째, 제로서의 원소로서 "A"
및 []
를 갖는 순서쌍이다.
[[] | "A"]
은 첫 번째 요소가 []
이고 두 번째 요소가 "A"
인 순서가 지정된 쌍입니다. 문자열은 실제로 Erlang의 ASCII 코드 목록이므로 []
및 65
(ASCII A
)을 요소로 포함하는 목록과 같습니다. 목록의 첫 번째 요소는 그 자체가 목록이므로 중첩 된 목록입니다.
[head | tail]
head
가 하나의 요소이다
와 꼬리가 다른 목록입니다
+1, 내 것보다 더 나은 설명. –
@larsmans 감사합니다. 귀하의 의견에 감사드립니다. – jcollado