Erlangでリストを作成できる次の2つの式が異なる結果を返すのはなぜですか?Erlangリストの作成
> ["A" | []]
// returns ["A"]
> [[] | "A"]
// returns [[], 65]
私は、2番目の式が最初の式と同じ結果を返すと予想していました。誰もがなぜこれが起こっているのか説明できますか?
Erlangでリストを作成できる次の2つの式が異なる結果を返すのはなぜですか?Erlangリストの作成
> ["A" | []]
// returns ["A"]
> [[] | "A"]
// returns [[], 65]
私は、2番目の式が最初の式と同じ結果を返すと予想していました。誰もがなぜこれが起こっているのか説明できますか?
は適切にすべてのこれらの表現は、このパターンに従うことに注意してください、これがどのように機能するかを理解するために。
また、文字列は文字のリストであり、つまり"A"
は実際には[65]
に等しいことに注意してください。
したがって、先頭が"A"
で末尾が[]
のリストが作成され、期待どおりに["A"]
になります。
しかし、第2の場合、頭部は[]
であり、尾部は"A"
であり、これは[65]
に等しい。したがって、結果はヘッド要素([]
)とテールのすべての要素(65
)です。
なぜ同じであるべきかわかりません。あなたは[A|B]
を連結リストA
とB
ことを考えるかもしれないが、それはしていません:B
リストに要素A
を付加することを意図しています。
["A" | []]
は、単一の要素として"A"
でリストに対応するその第二として、その最初の要素と[]
、として"A"
を有する順序対です。
[[] | "A"]
は、第1要素として[]
と第2要素として"A"
との順序付きペアです。文字列は実際にはErlangのASCIIコードのリストなので、[]
と65
(ASCII A
)を要素とするリストと同じであることを意味します。リストの最初の要素はそれ自身がリストであるため、これはネストされたリストです。
[head | tail]
head
が単一の要素であると尾が別のリストである:
+1、私より良い説明。 –
@larsmansありがとう、あなたのコメントをいただきありがとうございます。 – jcollado