Hi folks,

We're running into an issue where we're trying to associate some information about functions by associating the info with their serialized form, which is in part their procedure-source. Unfortunately, the procedure-source changes when a function is invoked:

(define (equal-source-after-apply? f)
   (if (not (equal? (procedure-source f)
                   (begin (f)
                          (procedure-source f))))
       (procedure-source f)
       #t))

(equal-source-after-apply? (lambda () (let ((x 3)) x)))
;; before: (lambda () (let ((x 3)) x))
;;  after: (lambda () (let* ((x 3)) x))
(equal-source-after-apply? (lambda () '#:g))
;; before: (lambda () (quote #:g))
;;  after: (lambda () (begin #:g))

I can imagine one solution to be remembering the actual source somewhere instead of regenerating it in procedure-source. That would be great.

As a less invasive option, perhaps procedure-source could do whatever it is that invocation does to "simplify" the function before returning the source for the first time?

Thanks,
Grem

--
------ __@   Gregory A. Marton                http://csail.mit.edu/~gremio/
--- _`\<,_                                                                .
-- (*)/ (*)                   There's no place like /home
~~~~~~~~~~~~~~~~-~~~~~~~~_~~~_~~~~~v~~~~^^^^~~~~~--~~~~~~~~~~~~~~~++~~~~~~~



Reply via email to