Hi,

i'm currently writing some small helper macros for myself, that makes chicken's module system syntactically a little bit more similar to python's one.

I would wish to have a macro that doesn't pollute the current namespace environment by default. It should introduce for each module a seperate prefix

Concretly in chicken the following templates

(imports std.list)

should be expanded to:

(import (prefix std.list std.list/))

Hint:
It's the same problem discussed here in http://lists.nongnu.org/archive/html/chicken-users/2005-08/msg00025.html (2005)
Unfortunetely, it's not uptodate anymore with chicken's API.

1) I have tried to following snippet

(define-syntax imports
  (ir-macro-transformer
    (lambda (x i c)
      (let ((name (cadr x))
            (pre (symbol-append (i (caddr x)) '\.)))
        `(import (prefix ,name ,pre))))))

that expands the top expression to:

(import (prefix std.list std.list/)) correctly.

But here the call seems to fail. Functions and the namespace are not available. If i use directly the expanded
version, it works.



2) If i slighty change the macro definition to give an explicit module prefix by changing (caddr x) to name within the pre let-binding

(import std.list list) expands to (import (prefix std.list list15141515/))


In the sources it's seems at the first view the import system is very tight integrated with the macro expansion.

Any ideas how i get it working, if it's possible?


Best regards,
Chris


fty. I'm not familar with low-level macro transformers :] but I got the prefix symbol extension not working with syntax-rules().











_______________________________________________
Chicken-users mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/chicken-users

Reply via email to