[ create a new paste ] login | about

Link: http://codepad.org/TES3Rb1Y    [ raw code | output | fork ]

Ruby, pasted on May 17:
require 'ostruct'

class Proc
  alias ===  call
end

class Env
  def list(x, xs)
    lambda{|list|
       Array === list && lambda{|list|
          _.x, *_.xs = list
          true
       }.call(list) 
    }
  end
  
  def _
    @mdata[-1]
  end
      
  def match(thing)
    r= OpenStruct.new
    r._obj = thing
    @mdata.push(r)
    yield
    @mdata.pop.ret
  end

  def _case(a)
    return if _.break
    if a === _._obj
       _.ret = yield  
       _.break = true
    end
  end

  def reverse list
    match list do
      _case []            do  [] end
      _case list(:x, :xs) do  reverse(_.xs) << _.x  end
    end
  end

  def test
    @mdata = []
    p reverse([1,2,3,4,5])
  end
end

Env.new.test


Output:
1
[5, 4, 3, 2, 1]


Create a new paste based on this one


Comments: