Hatena::Grouperlang

msyktの日記

 | 

2013-10-31

2.10 リスト(p.22)

00:29

[...|T]構築子を使ってリストを作るときは、Tが必ずリストであるように気を付けなければならない。Tがリストならば、作ったリストは「正しい形式」になる。Tがリストではない場合、出来上がったリストを「不正な形式」であるという。ライブラリ関数のほとんどはリストが正しい形式であると仮定していて、不正なリストに対しては正しく機能しない。

リストはこの部分だけ気になった。

Eshell V5.10.1  (abort with ^G)
1> A = [1, 2].  
[1,2]
2> B = 3.
3
3> C = [0 | A].
[0,1,2]
4> D = [0 | B].
[0|3]
5> is_list(D).
true
6> [E | F] = D.
[0|3]
7> E.
0
8> F.
3

Tにリスト以外の値である「3」を指定してリストを構築してみたら、[0|3]という不思議なリストができてしまった。[H|T]のパターンマッチで値を取り出せるけど、Tがリストではないので、Tがリストだと仮定するとエラーになってしまうのだろうか。[...|T]で構築する際、Tがリストでなければエラーとすれば良いと思うのだけれども、敢えてリスト以外も許容するのに何か理由があるのかな。

プログラミングErlang

プログラミングErlang

 |