Recent Lisping: Bootstrap Scheme in Ada and Introducing Protolith

January 28th, 2010

I have been extremely busy the last couple weeks, but when I find a scrap of spare time, I have been surrounding myself with little Lisp projects.

Most recently, I wrote a little prototypical object system for CL yesterday. I have named it protolith, and here is the description I gave on GitHub:

Just for exploratory fun, I decided to see what it takes to write a prototypical object system in Lisp. Apparently its not much, I'm far from an experienced Lisper (barely fluent, if that) and I got it done in ~50 lines. A testament to Lisp's flexibility and expressiveness.

And here is a small example:

CL-USER> (load "/home/fitzgen/dev/protolith/protolith.lisp")
T
CL-USER> (in-package :protolith)
#<PACKAGE "PROTOLITH">
PROTOLITH> (defobj account ()
             (bal 0)
             (deposit (lambda (self x)
                        (funcall self 'set 'bal (+ (funcall self 'bal)
                                                   x)))))
ACCOUNT
PROTOLITH> (account 'bal)
0
PROTOLITH> (account 'deposit 50)
50
PROTOLITH> (account 'bal)
50
PROTOLITH> (defobj checking-account (account)
             (withdraw (lambda (self x)
                         (progn
                           (funcall self 'set 'bal (- (funcall self 'bal)
                                                      x))
                           x))))
CHECKING-ACCOUNT
PROTOLITH> (checking-account 'bal)
50
PROTOLITH> (checking-account 'withdraw 10)
10
PROTOLITH> (checking-account 'withdraw 10)
10
PROTOLITH> (checking-account 'bal)
30
PROTOLITH> (checking-account 'proto)
#<CLOSURE ACCOUNT>

(Side note: For this site, I highlight syntax on the client-side with SHJS, but, as you can see above, they don't support syntax highlighting for Lisp. I'm thinking of moving towards writing a Pygments Django template filter that finds <pre> tags automatically and highlights the contents appropriately. If anyone has any other ideas shoot me an email.)

The other Lisping I have been doing is writing my boostrap scheme interpreter in Ada. Peter Michaux finished his series, and now I am just playing catch up. As of this moment, the printer, reader, and evaluator are complete, and it is just a matter of writing the proper primitives and special forms for the evaluator and I'm done. So far, I have implemented if, define, and set!, with cond, +, and, or, and a bunch of others, notably lambda still to come.

fitzgen@shaolin:~/dev/ada-scheme
    $ ./scheme
Welcome to Bootstrap Scheme -- Ada version.
> (define foo #t)
; ok
> foo
; #t
> (if foo "hello" "goodbye")
; "hello"
> (set! foo #f)
; ok
> (if foo "hello" "goodbye")
; "goodbye"
> foo
; #f
> 

That's all for now, more updates to come soonish.

« Previous Entry

Next Entry »

View Comments


Recent Entries


TryParenScript.com

On July 23rd, 2010


In response to "A JavaScript Function Guard"

On July 19th, 2010


My Notes from John Resig's "jQuery Hack Day" Talk

On July 5th, 2010


Announcing Pocco

On June 29th, 2010


Yet Another Lisp

On June 25th, 2010


Recent Happenings: All Play and No Work

On June 21st, 2010


Arguments.callee considered extraneous

On June 2nd, 2010


Javascript, "bind", and "this"

On May 20th, 2010


Class-Based Views and Django

On May 19th, 2010


Introducing Zoolander

On May 2nd, 2010


Creative Commons License

Fork me on GitHub