Thanks Marc,<br><br>I was pondering on this earlier today, and it struck me a really simple solution is this:<br><br>types.scm <-- not really scheme, but defines the types I want to use<br><br>destructure.scm <-- reads data in from types.scm<br>
<br>prog.scm <-- reads data in from types.scm, and executes the right define-types<br><br>:-)<br><br><br>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).<br>
<br>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<br>
<br>Thanks!<br><br><div class="gmail_quote">On Tue, Jun 2, 2009 at 7:56 AM, Marc Feeley <span dir="ltr"><<a href="mailto:feeley@iro.umontreal.ca">feeley@iro.umontreal.ca</a>></span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div><div></div><div class="h5"><br>
On 2-Jun-09, at 12:24 AM, lowly coder wrote:<br>
<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
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.<br>
<br>
I find myself writing way too much code of the form:<br>
<br>
(define-type foo a b)<br>
(define-type bar c d)<br>
<br>
(lambda (x)<br>
  (let ((c (bar-c x) (d (bar-d x)))<br>
    (let ((a (foo-a a) (b (foo-b b)) ...<br>
</blockquote>
<br></div></div>
Try this (but beware that the API for the ## procedures may change in the future):<br>
<br>
(define-macro (def-type . args)<br>
  (##define-type-parser<br>
   'def-type<br>
   #f<br>
   args<br>
   (lambda (name<br>
            flags<br>
            id<br>
            extender<br>
            constructor<br>
            constant-constructor<br>
            predicate<br>
            implementer<br>
            type-exhibitor<br>
            prefix<br>
            fields<br>
            total-fields)<br>
     (let ((field-names (map car fields)))<br>
       `(begin<br>
          (define-type ,@args)<br>
          (define (,(##symbol-append 'with- name) obj proc)<br>
            (proc ,@(map (lambda (f)<br>
                           `(,(##symbol-append name '- f) obj))<br>
                         field-names))))))))<br>
<br>
(def-type point x y)<br>
<br>
(define p (make-point 11 22))<br>
<br>
(with-point p (lambda (x y) (pp (list 'x+y= (+ x y)))))<br><font color="#888888">
<br>
<br>
Marc<br>
<br>
</font></blockquote></div><br>