Polylithic linked list structure used to implement several data structures in Rake.
| EMPTY | = | EmptyLinkedList.new |
| [R] | head | |
| [R] | tail |
Cons a new head onto the tail list.
Source: show
# File lib/rake/linked_list.rb, line 70 def self.cons(head, tail) new(head, tail) end
The standard empty list class for the given LinkedList class.
Source: show
# File lib/rake/linked_list.rb, line 75 def self.empty self::EMPTY end
Make a list out of the given arguments. This method is polymorphic
Source: show
# File lib/rake/linked_list.rb, line 61 def self.make(*args) result = empty args.reverse_each do |item| result = cons(item, result) end result end
Source: show
# File lib/rake/linked_list.rb, line 10 def initialize(head, tail=EMPTY) @head = head @tail = tail end
Lists are structurally equivalent.
Source: show
# File lib/rake/linked_list.rb, line 27 def ==(other) current = self while ! current.empty? && ! other.empty? return false if current.head != other.head current = current.tail other = other.tail end current.empty? && other.empty? end
Polymorphically add a new element to the head of a list. The type of head node will be the same list type has the tail.
Source: show
# File lib/rake/linked_list.rb, line 17 def conj(item) self.class.cons(item, self) end
For each item in the list.
Source: show
# File lib/rake/linked_list.rb, line 50 def each current = self while ! current.empty? yield(current.head) current = current.tail end self end
Is the list empty?
Source: show
# File lib/rake/linked_list.rb, line 22 def empty? false end