2012-02-28 15 views
1

Erlangでリストを作成できる次の2つの式が異なる結果を返すのはなぜですか?Erlangリストの作成

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

私は、2番目の式が最初の式と同じ結果を返すと予想していました。誰もがなぜこれが起こっているのか説明できますか?

答えて

8

は適切にすべてのこれらの表現は、このパターンに従うことに注意してください、これがどのように機能するかを理解するために。

また、文字列は文字のリストであり、つまり"A"は実際には[65]に等しいことに注意してください。

したがって、先頭が"A"で末尾が[]のリストが作成され、期待どおりに["A"]になります。

しかし、第2の場合、頭部は[]であり、尾部は"A"であり、これは[65]に等しい。したがって、結果はヘッド要素([])とテールのすべての要素(65)です。

+0

+1、私より良い説明。 –

+0

@larsmansありがとう、あなたのコメントをいただきありがとうございます。 – jcollado

2

なぜ同じであるべきかわかりません。あなたは[A|B]を連結リストABことを考えるかもしれないが、それはしていません:Bリストに要素Aを付加することを意図しています。

["A" | []]

は、単一の要素として"A"でリストに対応するその第二として、その最初の要素と[]、として"A"を有する順序対です。

[[] | "A"]は、第1要素として[]と第2要素として"A"との順序付きペアです。文字列は実際にはErlangのASCIIコードのリストなので、[]65(ASCII A)を要素とするリストと同じであることを意味します。リストの最初の要素はそれ自身がリストであるため、これはネストされたリストです。

[head | tail] 
headが単一の要素である

と尾が別のリストである:

関連する問題