Saturday, September 23, 2006

arnesi continuations

I've just moved back to the UK from Australia. With a few days of jet-lagged downtime I've managed to fit in some fiddling with CL. The CVS version of SBCL now appears to work with Slime under Win32 (which is very very cool), and I've been playing with with-call/cc from arnesi. It took a bit of fiddling to realise that you need to use defun/cc - documentation seems to be quite thin on the ground. Once I twigged, it was pretty easy to port Fig 22.4 of OnLisp to CL:

(defparameter *paths* nil)

(defun/cc choose (choices)
(if (null choices)
(fail)
(let/cc cc
(push (lambda () (kall cc (choose (cdr choices)))) *paths*)
(kall cc (car choices)))))

(defun/cc fail ()
(if (null *paths*)
(kall arnesi::*toplevel-k* '@)
(funcall (pop *paths*))))



So that now Fig 22.3 can be written:

(defun/cc two-numbers ()
(list (choose '(0 1 2 3 4 5))
(choose '(0 1 2 3 4 5))))

(defun parlor-trick (sum)
(with-call/cc
(let ((nums (two-numbers)))
(if (= (apply #'+ nums) sum)
`(the sum of ,@nums)
(fail)))))

2 Comments:

Anonymous Anonymous said...

Well you seem to have progressed much further with CL than I have. Bought the Paul Graham book this year, but never got around to actually coding anything in it.

You're back in Brighton now?

8:03 am  
Blogger Unknown said...

Last post is from 2006, is there anything else coming or is gaming with lisp dead :/

1:05 pm  

Post a Comment

<< Home