Christopher Allan Webber writes:

> I guess I never sent this to this list.  Here's a functional setter for
> GOOPS classes.

Hah!  Just this week I have been wondering the perceived absense of
functional setters (and figured I *must* have missed something
somewhere) and wrote

--8<---------------cut here---------------start------------->8---
(define ((identity-initializer o) name)
  (list (symbol->keyword name) (slot-ref o name))) 

(define-method (clone o . setters)
 (let* ((class (class-of o))
        (slots (class-slots class))
        (names (map slot-definition-name slots))
        (initializers (map (identity-initializer o) names))
        (keywords (filter keyword? setters))
        (initializers (filter (lambda (i) (not (memq (car i) keywords))) 
initializers))
        (initializers (append (apply append initializers) setters))
        (arguments (cons class initializers)))
   (apply make arguments)))
--8<---------------cut here---------------end--------------->8---

Usage:

   (clone o #:slot <VALUE> ...)
   
Greetings,
Jan

-- 
Jan Nieuwenhuizen <jann...@gnu.org> | GNU LilyPond http://lilypond.org
Freelance IT http://JoyofSource.com | AvatarĀ®  http://AvatarAcademy.nl  

Reply via email to