Module: MiniKraken::Composite::List

Defined in:
lib/mini_kraken/composite/list.rb

Overview

Module that implements convenience methods for manipulating proper lists represented with ConsCell objects.

Class Method Summary collapse

Class Method Details

.cons(obj1, obj2 = nil) ⇒ Composite::ConsCell

Factory method for constructing a ConsCell pair.

Parameters:

  • obj1 (Term)
  • obj2 (Term) (defaults to: nil)

Returns:



14
15
16
# File 'lib/mini_kraken/composite/list.rb', line 14

def self.cons(obj1, obj2 = nil)
  ConsCell.new(obj1, obj2)
end

.make_list(arr) ⇒ Composite::ConsCell

Factory method. Build a proper list with elements of given array.

Parameters:

  • arr (Array)

    Array of elements to put in a new list

Returns:



21
22
23
24
25
26
27
28
29
# File 'lib/mini_kraken/composite/list.rb', line 21

def self.make_list(arr)
  return cons(nil, nil) if arr.empty?

  reversed = arr.reverse

  reversed.reduce(nil) do |sub_result, elem|
    ConsCell.new(elem, sub_result)
  end
end