module Pairs
Constants
- VERSION
Public Class Methods
car(pair)
click to toggle source
# File lib/pairs.rb, line 21 def self.car(pair) check_pair(pair) pair.call('car') end
cdr(pair)
click to toggle source
# File lib/pairs.rb, line 26 def self.cdr(pair) pair.call('cdr') end
check_pair(pair)
click to toggle source
# File lib/pairs.rb, line 15 def self.check_pair(pair) return if pair?(pair) raise NoMethodError, pair.to_s end
cons(left, right)
click to toggle source
# File lib/pairs.rb, line 2 def self.cons(left, right) lambda { |message| case message when 'car' left when 'cdr' right else raise "Unknown message #{message}" end } end
pair?(pair)
click to toggle source
# File lib/pairs.rb, line 30 def self.pair?(pair) pair.instance_of? Proc end
to_string(pair)
click to toggle source
# File lib/pairs.rb, line 34 def self.to_string(pair) rec = lambda { |pair_inner| return pair_inner.to_s unless pair?(pair_inner) left = car(pair_inner) right = cdr(pair_inner) "(#{rec.call(left)}, #{rec.call(right)})" } rec.call(pair) end