リストと配列とハッシュの違いとか

ついでに今更気づいてみた程度の事を色々
 自分は、リストはイマイチ使い方がよく分かってないので、というか配列とかも文字列適当にやっても扱えるxyzzyだと何か使う必要ない感じで使ってなかったり。ハッシュも必要なら使う程度でハッシュの方が楽な場面でも何故かリストが使いたくて*1リストを使ったりしてしまっている話。
■リストの良さそうな使い方
で、最近気づいたリストの良さそうな使い方。を人のコードみて気づいたのでメモ。

  • 変数で名前を大量に消費する時とか*2

ちょっとまて、これは構造体でも良いじゃないかとか。lispも確か構造体はあったはず、人のコードでは見た事もあるけど、自分は難しそうなので使ってないとか。あ、でもlistだと順序とか好き勝手に入れ替えれるからそれが違うか

  • 構造体と違って順序を好き勝手に入れ替えて使える
  • ハッシュと違って名前で縛られないので、適当に中身の入れ替えが出来るとか

■配列とリストは何が違うか
S式じゃなくて数値と文字列だけしか入れれないとかで区別しているのかと思ったらよく見たら、xyzzyの配列の説明見てたらS式なら何でも入れれるとか言ってるから、じゃあlistと何が違うのか今更疑問に思ってみたりして、で、見つけた話
http://www5c.biglobe.ne.jp/~can/perlpro/array.html

配列(array)は、プリミティブなオブジェクトの一つで、要素ごとにスロットを持ちます。全ての要素は、一定の時間でアクセス可能ですが、既存の配列の長さを変えることはできません。文字列とベクタは配列の二つの型です。

リストは要素の並びですが、プリミティブなオブジェクトの一つではありません。リストはコンス・セルからなり、要素ごとに一つのセルが割当てられています。n番目の要素を見つけるには、n番目のコンス・セルまで全て見なければならないので、リストの先頭から遠い要素ほどアクセスに時間がかかります。しかし、リストだと要素を追加することや取り除くことができます。

なるほど、リストと配列は、中に入ってるものの並べ方が違うだけなのか。今まで気づいてなかったが、リストを配列のように使ってた自分としては、随分アクセスし難い配列だと思ってたりしたが、それも配列が別にあることを考えれば当然と言えば当然。
■まとめ
リストとか配列とか基本的なことを理解してなくてもローカル変数とインチキリストを適当に使えば何とかできるlispって素晴らしいとか。

*1:使いどころがよく分かってないから兎に角試してみたいとかで

*2:wiki-mode見て気づいたけど非常にスッキリする