class Rake::LinkedList
Polylithic linked list structure used to implement several data structures in Rake.
Constants
- EMPTY
Attributes
head[R]
tail[R]
Public Class Methods
cons(head, tail)
click to toggle source
Cons a new head onto the tail list.
# File lib/rake/linked_list.rb, line 73 def self.cons(head, tail) new(head, tail) end
empty()
click to toggle source
The standard empty list class for the given LinkedList
class.
# File lib/rake/linked_list.rb, line 78 def self.empty self::EMPTY end
make(*args)
click to toggle source
Make a list out of the given arguments. This method is polymorphic
# File lib/rake/linked_list.rb, line 59 def self.make(*args) # return an EmptyLinkedList if there are no arguments return empty if !args || args.empty? # build a LinkedList by starting at the tail and iterating # through each argument # inject takes an EmptyLinkedList to start args.reverse.inject(empty) do |list, item| list = cons(item, list) list # return the newly created list for each item in the block end end
new(head, tail=EMPTY)
click to toggle source
# File lib/rake/linked_list.rb, line 84 def initialize(head, tail=EMPTY) @head = head @tail = tail end
Public Instance Methods
==(other)
click to toggle source
Lists are structurally equivalent.
# File lib/rake/linked_list.rb, line 25 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
conj(item)
click to toggle source
Polymorphically add a new element to the head of a list. The type of head node will be the same list type as the tail.
# File lib/rake/linked_list.rb, line 12 def conj(item) self.class.cons(item, self) end
each() { |head| ... }
click to toggle source
For each item in the list.
# File lib/rake/linked_list.rb, line 48 def each current = self while !current.empty? yield(current.head) current = current.tail end self end
empty?()
click to toggle source
Is the list empty? .make guards against a list being empty making any instantiated LinkedList
object not empty by default You should consider overriding this method if you implement your own .make method
# File lib/rake/linked_list.rb, line 20 def empty? false end
inspect()
click to toggle source
Same as to_s
, but with inspected items.
# File lib/rake/linked_list.rb, line 42 def inspect items = map(&:inspect).join(", ") "LL(#{items})" end
to_s()
click to toggle source
Convert to string: LL(item, item…)
# File lib/rake/linked_list.rb, line 36 def to_s items = map(&:to_s).join(", ") "LL(#{items})" end