iolist と list

iolist と list の違いを人に説明できないので、理解出来ていないと思う今日この頃です。iolist は末尾が binary であってもよいと書かれているのですがどうも理解できません。

理解できていないことを晒しておきます。

> erlang:iolist_size([102,111,111,32,"42",32,98,97,114,"\n"]).
11
> length([102,111,111,32,"42",32,98,97,114,"\n"]).            
10
> iolist_to_binary([102,111,111,32,"42",32,98,97,114,"\n"]).    
<<"foo 42 bar\n">>
> list_to_binary([102,111,111,32,"42",32,98,97,114,"\n"]).  
<<"foo 42 bar\n">>

おまけに言うと lists:reverse(Acc, ) のも必要性がまだ理解出来ていません。

Acc が [Egg|Ham] だとするならば、再帰を使って [Spam|Acc] とやると実際は [Spam|[Egg|Ham]] となっているということが起因していてネストしている場合は末尾が であるということが起因していて、IO 処理の場合だと [] が末尾ではなくバイナリになってしまうので ... という事を勝手考えていますが正しいのかもよくわからず。

iolist_size とか iolist_to_binary を byte_size や list_to_binary と区別して使っていけるようにならないと。。。

id:ita-wasa さんからのコメントがとても素敵なのでコメントを読むと良いです