Lisp in Ruby

You got your Lisp in my Ruby! A Lisp has been constructed that can be run inside of any Ruby, composed of just lists, symbols, and a few methods. Here’s a list reverse function written in Ruby Lisp:

require 'lisp'

# Create an environment where the reverse, rev_shift and null
# functions are bound to an appropriate identifier.
env = [
  cons(:rev_shift,
    [:lambda, [:list, :result],
      [:cond,
        [[:null, :list], :result],
        [:t, [:rev_shift, [:cdr, :list],
            [:cons, [:car, :list], :result]]]]].sexp),
  cons(:reverse,
    [:lambda, [:list], [:rev_shift, :list, nil]].sexp),
  cons(:null, [:lambda, [:e], [:eq, :e, nil]].sexp),
  cons(:t, true), 
  cons(nil, nil)
].sexp

# Evaluate an S-Expression and print the result
exp = [:reverse, [:quote, [:a, :b, :c, :d, :e]]].sexp

Here are the same definitons from env were they written in a traditional Lisp:

(defun reverse (list)
  (rev-shift list nil))

(defun rev-shift (list result)
  (cond ((null list) result)
        (t (rev-shift (cdr list) (cons (car list) result))) ))

Notes