(keyword-lambda ((offset))
(+ base (or offset 0)))
expands to
(with-let (unlet)
(lambda* ((offset #f))
(+ base (or offset 0))))
where lambda* et al are from the built-in startup global environment,
so the local variable is happy:
(define xyz
(let ((base 123))
(keyword-lambda ((offset))
(+ base (or offset 0)))))
(writeln (xyz)) ; 123
(writeln (keyword-call xyz (offset 3))) ;126
(with-let (unlet) ...) goes underneath the global environment, so to
speak,
giving you the built-in startup values, so even set! at the top level
won't
affect it. There are, of course, many other choices. I added some more
examples to s7.html this morning.
I hate to admit I have no idea what docker is -- I'll check it out.