Class: Rake::LinkedList
- Inherits:
-
Object
- Object
- Rake::LinkedList
- Includes:
- Enumerable
- Defined in:
- lib/rake/linked_list.rb
Overview
Polylithic linked list structure used to implement several data structures in Rake.
Direct Known Subclasses
Defined Under Namespace
Classes: EmptyLinkedList
Instance Attribute Summary collapse
-
#head ⇒ Object
readonly
Returns the value of attribute head.
-
#tail ⇒ Object
readonly
Returns the value of attribute tail.
Class Method Summary collapse
-
.cons(head, tail) ⇒ Object
Cons a new head onto the tail list.
-
.empty ⇒ Object
The standard empty list class for the given LinkedList class.
-
.make(*args) ⇒ Object
Make a list out of the given arguments.
Instance Method Summary collapse
-
#==(other) ⇒ Object
Lists are structurally equivalent.
-
#conj(item) ⇒ Object
Polymorphically add a new element to the head of a list.
-
#each ⇒ Object
For each item in the list.
-
#empty? ⇒ Boolean
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.
-
#inspect ⇒ Object
Same as
to_s
, but with inspected items. -
#to_s ⇒ Object
Convert to string: LL(item, item…).
Instance Attribute Details
#head ⇒ Object (readonly)
Returns the value of attribute head.
7 8 9 |
# File 'lib/rake/linked_list.rb', line 7 def head @head end |
#tail ⇒ Object (readonly)
Returns the value of attribute tail.
7 8 9 |
# File 'lib/rake/linked_list.rb', line 7 def tail @tail end |
Class Method Details
.cons(head, tail) ⇒ Object
Cons a new head onto the tail list.
72 73 74 |
# File 'lib/rake/linked_list.rb', line 72 def self.cons(head, tail) new(head, tail) end |
.empty ⇒ Object
The standard empty list class for the given LinkedList class.
77 78 79 |
# File 'lib/rake/linked_list.rb', line 77 def self.empty self::EMPTY end |
.make(*args) ⇒ Object
Make a list out of the given arguments. This method is polymorphic
58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/rake/linked_list.rb', line 58 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 |
Instance Method Details
#==(other) ⇒ Object
Lists are structurally equivalent.
24 25 26 27 28 29 30 31 32 |
# File 'lib/rake/linked_list.rb', line 24 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) ⇒ Object
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.
11 12 13 |
# File 'lib/rake/linked_list.rb', line 11 def conj(item) self.class.cons(item, self) end |
#each ⇒ Object
For each item in the list.
47 48 49 50 51 52 53 54 |
# File 'lib/rake/linked_list.rb', line 47 def each current = self while !current.empty? yield(current.head) current = current.tail end self end |
#empty? ⇒ Boolean
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
19 20 21 |
# File 'lib/rake/linked_list.rb', line 19 def empty? false end |
#inspect ⇒ Object
Same as to_s
, but with inspected items.
41 42 43 44 |
# File 'lib/rake/linked_list.rb', line 41 def inspect items = map(&:inspect).join(", ") "LL(#{items})" end |
#to_s ⇒ Object
Convert to string: LL(item, item…)
35 36 37 38 |
# File 'lib/rake/linked_list.rb', line 35 def to_s items = map(&:to_s).join(", ") "LL(#{items})" end |