codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
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
Private
[
?
]
Run code
Submit