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!
On Tue, Jun 2, 2009 at 7:56 AM, Marc Feeley feeley@iro.umontreal.ca wrote:
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)) ...
Try this (but beware that the API for the ## procedures may change in the future):
(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