<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -2,60 +2,29 @@
 
 == Parsing
 
-&quot;a sequence of letters, digits, and &quot;extended alphabetic characters
-that begins with a character that cannot begin a number is an
-identifier&quot;
+Unsupported:
+* Quasiquote, unquote, unquote-splice
+* Backslash in strings
+* Character literals
+* Alternate-base numbers
+* Alternate define lambda forms
 
-Extended chars: 
-! $ % &amp; * + - . / : &lt; = &gt; ? @ ^ _ ~
-
-Quasiquote, unquote, unquote-splice
-
-Backslash in strings
-
-[]{}| - reserved
-
-Character literals
-
-Alternate-base numbers
-
-Alternate lambda forms
+* []{}| should be reserved
 
 == Functions
 
 === Basic
-read
-cond
-case
-let*
-letrec
-do
-delay
-
-=== Predicates
-boolean?
-symbol?
-char?
-vector?
-procedure?
-pair?
-number?
-string?
-port?
-
-== Errors
-
-Mutating constant values
-Using invalid identifiers
-
-== Macros
-
-...
-
-== Other
-
+Unsupported:
+* cond
+* case
+* let*
+* letrec
+* do
+* delay
+* read - uses Ruby's gets
+
+== General
 Tail-recursion
 
 Continuations
 
-Gone through the doc through section 4</diff>
      <filename>R5RS.diff</filename>
    </modified>
    <modified>
      <diff>@@ -13,7 +13,11 @@ code is strictly bus-driven. Bus Scheme is primarily a toy; using it
 for anything serious is (right now) ill-advised.
 
 Bus Scheme aims for general Scheme usefulness optimized for learning
-and fun. It's loosely targeting R5RS, but varies in huge ways.
+and fun. It's loosely targeting R5RS, but varies in huge ways. (For
+the purposes of this project we pretend that R6RS never happened.) See
+the file R5RS.diff for ways in which Bus Scheme differs from the
+standard, both things that are yet unimplemented and things that are
+intentionally different.
 
 == Usage
 </diff>
      <filename>README.txt</filename>
    </modified>
    <modified>
      <diff>@@ -48,7 +48,7 @@ task :rbx_test do
   if ENV['test']
     system &quot;#{BIN} test/test_#{ENV['test']}.rb&quot;
   else
-    system &quot;#{BIN} -w -Ilib:ext:bin:test -e '#{Dir.glob('test/test_*.rb').map{ |f| &quot;require \&quot;&quot; + f + &quot;\&quot; &quot;}.join('; ')}'&quot;
+    system &quot;#{BIN} -w -Ilib:test -e '#{Dir.glob('test/test_*.rb').map{ |f| &quot;require \&quot;&quot; + f + &quot;\&quot; &quot;}.join('; ')}'&quot;
   end
 end
 </diff>
      <filename>Rakefile</filename>
    </modified>
    <modified>
      <diff>@@ -75,5 +75,6 @@ module BusScheme
     (@loaded_files ||= [&quot;(eval)&quot;])
   end
 
-  ['core.scm', 'test.scm', 'list.scm'].each { |file| load(file) }
+  ['core.scm', 'test.scm', 'list.scm', 'predicates.scm'
+  ].each { |file| load(file) }
 end</diff>
      <filename>lib/bus_scheme.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,8 @@
 module BusScheme
   class Cons
     attr_accessor :car, :cdr
-    
+
+    # TODO: figure out default values
     def initialize(car, cdr = nil)
       @car, @cdr = [car, cdr]
     end</diff>
      <filename>lib/cons.rb</filename>
    </modified>
    <modified>
      <diff>@@ -48,7 +48,7 @@ module BusScheme
   end
 
   def stacktrace
-    # (stacktrace)'s own frame shouldn't be included...
+    # TODO: notrace is super-duper-hacky!
     @@stack.reverse.map{ |frame| frame.trace if frame.respond_to? :trace and frame.called_from != 'begin-notrace'}.compact
   end
 </diff>
      <filename>lib/eval.rb</filename>
    </modified>
    <modified>
      <diff>@@ -6,6 +6,7 @@ module BusScheme
     
     # create new Lambda object
     def initialize(formals, body)
+      @special_form = false
       @formals, @body, @enclosing_scope = [formals, body, BusScheme.current_scope]
       @car = :lambda.sym
       @cdr = Cons.new(@formals.sexp, @body.sexp)</diff>
      <filename>lib/lambda.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,13 +1,25 @@
-module Callable
-  # allows for (mylist 4) =&gt; mylist[4]
-  def call_as(sym, *args)
-    self.call(*args)
+class Sym &lt; String
+  attr_accessor :file, :line
+
+  # TODO: refactor?
+  def special_form
+    BusScheme[self].special_form
   end
-  def call(*args)
-    self.[](*args)
+  
+  def inspect
+    self
+  end
+
+  def to_s
+    self
+  end
+
+  def sym
+    self
   end
 end
 
+
 class Object
   # Return self after evaling block
   # see http://www.ruby-forum.com/topic/131340
@@ -25,6 +37,16 @@ class Object
   end
 end
 
+module Callable
+  # allows for (mylist 4) =&gt; mylist[4]
+  def call_as(sym, *args)
+    self.call(*args)
+  end
+  def call(*args)
+    self.[](*args)
+  end
+end
+
 class String
   include Callable
   def sym
@@ -38,27 +60,6 @@ class Symbol
   end
 end
 
-class Sym &lt; String
-  attr_accessor :file, :line
-
-  # TODO: refactor?
-  def special_form?
-    BusScheme[self].special_form?
-  end
-  
-  def inspect
-    self
-  end
-
-  def to_s
-    self
-  end
-
-  def sym
-    self
-  end
-end
-
 class Hash
   include Callable
 end</diff>
      <filename>lib/object_extensions.rb</filename>
    </modified>
    <modified>
      <diff>@@ -21,7 +21,7 @@ module BusScheme
   define '/', lambda { |x, y| x / y }
 
   define 'concat', lambda { |*args| args.join('') }
-  define 'cons', lambda { |car, cdr| Cons.new(car, cdr) }
+  define 'cons', lambda { |*args| Cons.new(*args) }
   define 'list', lambda { |*members| members.to_list }
   define 'vector', lambda { |*members| members.to_a }
   define 'map', lambda { |fn, list| list.map(lambda { |n| fn.call(n) }).sexp }
@@ -36,7 +36,7 @@ module BusScheme
   define 'fail', lambda { |message| raise AssertionFailed, &quot;#{message}\n  #{BusScheme.stacktrace.join(&quot;\n  &quot;)}&quot; }
   
   define 'ruby', lambda { |*code| Kernel.eval code.join('') }
-  define 'send', lambda { |obj, *message| obj.send(*message) }
+  define 'send', lambda { |obj, message, *args| obj.send(message.to_sym, *args) }
 
   define 'load', lambda { |filename| BusScheme.load filename }
   define 'exit', lambda { exit }</diff>
      <filename>lib/primitives.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,6 +1,6 @@
 ;; Test list functions defined in list.scm
 
-(assert-equal (quote (1 2 3)) (reverse (quote (3 2 1))))
+(assert-equal (list 1 2 3) (reverse (list 3 2 1)))
 
 (assert-equal (quote (1 2 3 4)) (append (quote ()) (quote (1 2 3 4))))
 (assert-equal (quote (1 2 3 4)) (append (quote (1 )) (quote (2 3 4))))</diff>
      <filename>test/test_list_functions.scm</filename>
    </modified>
    <modified>
      <diff>@@ -8,7 +8,9 @@ class PrimitivesTest &lt; Test::Unit::TestCase
   end
 
   def test_run_scheme_tests
-    BusScheme.load(File.dirname(__FILE__) + '/test_primitives.scm')
+    Dir.glob(File.dirname(__FILE__) + '/test_*.scm').each do |f|
+      BusScheme.load f
+    end
   end
 
   def test_load_file</diff>
      <filename>test/test_primitives.rb</filename>
    </modified>
    <modified>
      <diff>@@ -17,6 +17,8 @@
 (assert-equal 9 (begin (define foo 779) 9))
 (assert-equal 779 foo)
 
+(assert (null? (cdr (cons 3))))
+
 ;; define
 (define foo 5)
 (define bar (quote (5 5 5)))</diff>
      <filename>test/test_primitives.scm</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>51b7e3d518cd3147059108dd06773ddc9b59a1ad</id>
    </parent>
  </parents>
  <author>
    <name>Phil Hagelberg</name>
    <email>phil@hagelb.org</email>
  </author>
  <url>http://github.com/technomancy/bus-scheme/commit/ab22cb87eb7253adc4dc50e5fac3210a6e5235f7</url>
  <id>ab22cb87eb7253adc4dc50e5fac3210a6e5235f7</id>
  <committed-date>2008-02-25T18:29:50-08:00</committed-date>
  <authored-date>2008-02-25T18:29:50-08:00</authored-date>
  <message>second airplane commit! got some more predicates</message>
  <tree>728712fd2c31ae254dbb834d6f7eea1c237fc3d1</tree>
  <committer>
    <name>Phil Hagelberg</name>
    <email>phil@hagelb.org</email>
  </committer>
</commit>
