Arthur Smyles writes:
...
Ghuloum's library is written in R6 scheme. It works fine out of the box, but I had some difficulty in modifying it to export some of Gambit's extensions.
You seem to have had an impact. I noticed that Ghuloum's library has a description and example of how to import implementation specific features using Gambit as an illustration.
BTW, one motivation for mentioning R6RS macros is that there is a nice system for "breaking hygiene", including creation of gensym'ed temporaries.
E.g. [from the r6rs-libraries doc]:
(define-syntax include (lambda (x) (define read-file (lambda (fn k) (let ([p (open-file-input-port fn)]) (let f ([x (get-datum p)]) (if (eof-object? x) (begin (close-port p) ’()) (cons (datum->syntax k x) (f (get-datum p)))))))) (syntax-case x () [(k filename) (let ([fn (syntax->datum #’filename)]) (with-syntax ([(exp ...) (read-file fn #’k)]) #’(begin exp ...)))])))
(define-syntax letrec (lambda (x) (syntax-case x () (( ((i e) ...) b1 b2 ...) (with-syntax (((t ...) (generate-temporaries #’(i ...)))) #’(let ((i <undefined>) ...) (let ((t e) ...) (set! i t) ... (let () b1 b2 ...))))))))
Also, it would seem natural to use a "gensym-prefix" which happened to match the Gambit namespace prefix of a particular module. Just a thought..
FYI, -KenD
Afficher les réponses par date