What kind of inspection?

If it's for security purposes, you're better off running the procedures in a sandbox (see the `racket/sandbox' module). You can even control the amount of time something is allowed to run. Also, `serial-lambda' might be something you could use, if the sender and receiver are both running the same program. (It might work in other circumstances; I don't know.)

Neil ⊥

On 01/02/2014 09:41 AM, Alegria Baquero wrote:
Thank you for your kind responses. Your solutions are good ones but
unfortunately don't fit my purpose. Imagine a mobile code scenario where
you have no control of the definition of a closure. What I want to do is
to be able to print the body of any incoming closure that arrives in a
message. So if server A sends server B a closure (lambda () (displayln
"hello world")), B could grab that incoming closure and capture it as
the string "(lambda () (displayln "hello world"))" so it can be
inspected before executing it. Does this make sense? How can I then
construct a function procedure->string that transforms at runtime
(without using macros) a closure's body to a string?

Thank you again and happy new year.

Alegria


On Tue, Dec 31, 2013 at 10:53 AM, Alexander D. Knauth
<alexan...@knauth.org <mailto:alexan...@knauth.org>> wrote:

    Yes, you can do it with a struct with the property prop:procedure.

    #lang racket

    (require rackunit)

    (struct my-proc (proc str)
       #:property prop:procedure (struct-field-index proc))

    (define f
       (my-proc  (lambda (x) (+ x 1))
                "(lambda (x) (+ x 1))"))

    (check-true (procedure? f))
    (check-equal? (f 1) 2)
    (check-equal? (my-proc-str f)
                   "(lambda (x) (+ x 1))")

    (define-syntax-rule (my-lambda args body ...)
       (my-proc                 (lambda args body ...)
                (substring (~v '(lambda args body ...)) 1)))

    (define f2
       (my-lambda (x) (+ x 1)))

    (check-true (procedure? f2))
    (check-equal? (f2 1) 2)
    (check-equal? (my-proc-str f2)
                   "(lambda (x) (+ x 1))")


    On Dec 29, 2013, at 10:45 PM, Alegria Baquero wrote:

    Hello,

    is there any way to transform a function's body to a string such
    as "(lambda(x)...)"?

    Thanks

    Alegria
    ____________________
     Racket Users list:
    http://lists.racket-lang.org/users




--
---------------------------------------------------------------------------------------
PhD candidate
Department of Informatics
Donald Bren School of Information and Computer Sciences
University of California, Irvine


____________________
   Racket Users list:
   http://lists.racket-lang.org/users


____________________
 Racket Users list:
 http://lists.racket-lang.org/users

Reply via email to