Hello, I'm Nick Fitzgerald. This is my weblog. You can also check out my shared items from Reader and code on GitHub. Feel free to contact me about whatever.
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.
On July 23rd, 2010
On July 19th, 2010
On July 5th, 2010
On June 29th, 2010
On June 25th, 2010
On June 21st, 2010
On June 2nd, 2010
On May 20th, 2010
On May 19th, 2010
On May 2nd, 2010
blog comments powered by Disqus