Thanks Marc,
I was pondering on this earlier today, and it struck me a really simple solution is this:
types.scm <-- not really scheme, but defines the types I want to use
destructure.scm <-- reads data in from types.scm
prog.scm <-- reads data in from types.scm, and executes the right define-types
:-)
On an unrelated note, what is this "heartbeat-interval", and how can I read it? (I can only set it via ##thread-heartbeat-interval-set!) ... it seems very key in the functionality of statprof.scm (it appears that statprof.scm depends on an interrupt being fired so often, then looking at the current state of the interpreter, and thus buiding a statistical view of the program).
Knowing the value of heartbeat-interval is _very_ important to me. In particular, I have a graphics server running at 100hertz. Suppose heartbeat-interval is also 100hz, I can easily get highly distorted values from statprof.scm
Thanks!
Try this (but beware that the API for the ## procedures may change in the future):
On 2-Jun-09, at 12:24 AM, lowly coder wrote:
are there any amcros that play well with destructuring bind of define-type's ? I just want to check to see if there's a pre-existing solution before re-inventing my own.
I find myself writing way too much code of the form:
(define-type foo a b)
(define-type bar c d)
(lambda (x)
(let ((c (bar-c x) (d (bar-d x)))
(let ((a (foo-a a) (b (foo-b b)) ...
(define-macro (def-type . args)
(##define-type-parser
'def-type
#f
args
(lambda (name
flags
id
extender
constructor
constant-constructor
predicate
implementer
type-exhibitor
prefix
fields
total-fields)
(let ((field-names (map car fields)))
`(begin
(define-type ,@args)
(define (,(##symbol-append 'with- name) obj proc)
(proc ,@(map (lambda (f)
`(,(##symbol-append name '- f) obj))
field-names))))))))
(def-type point x y)
(define p (make-point 11 22))
(with-point p (lambda (x y) (pp (list 'x+y= (+ x y)))))
Marc