本を読む

読書やコンピュータなどに関するメモ

Rubyで連結リスト

 これを見て、Rubyに連結リスト(Linked List)が標準添付ライブラリであったりしないかなと思って調べたら、Rakeの中にRake::LinkedListクラスがあった。自分で作っても大した手間ではないけど、それはさておき、試してみる。

 まずrequireで読み込む。

require 'rake/linked_list'

 クラス名が長いので、ここでは別名をつけてみる。

Cons = Rake::LinkedList

 リストを作る。以下の3とおりの書き方ができる。3つ目の書き方がいちばんシンプルだけど、内部では一度Arrayが作られてしまう。

list = Cons.new(1, Cons.new(2, Cons.new(3)))        # Lisp的に
list = Cons::EMPTY.conj(3).conj(2).conj(1)          # メソッドチェーンで
list = Cons.make(1, 2, 3)

 さて、リストの操作。headとtailが、carとcdrに相当する。to_sやinspectが定義されているので、リストをそのまま表示できる。

p list              #-> LL(1, 2, 3)
p list.head         #-> 1
p list.tail         #-> LL(2, 3)

 Enumerableをmixinしているので、mapとかそういうメソッドも使える。ただし、結果はArrayになる。

p list.map {|x| x * 2 }     #-> [2, 4, 6]

コメント

コメントの投稿

管理者にだけ表示を許可する

トラックバック

http://emasaka.blog65.fc2.com/tb.php/1299-e2484793

 | HOME | 

Categories

Recent Entries

Recent Comments

Recent Trackbacks

Appendix

emasaka

emasaka

フリーター。
連絡先はこのへん

Monthly


FC2Ad