s7 suggestion
bil@xxxxxx
(29 Oct 2019 13:40 UTC)
|
Re: s7 suggestion Lassi Kortela (29 Oct 2019 15:15 UTC)
|
Re: s7 suggestion
bil@xxxxxx
(29 Oct 2019 15:56 UTC)
|
Re: s7 suggestion
Lassi Kortela
(29 Oct 2019 16:19 UTC)
|
Re: s7 suggestion
Lassi Kortela
(29 Oct 2019 16:32 UTC)
|
Re: s7 suggestion
bil@xxxxxx
(29 Oct 2019 17:54 UTC)
|
Re: s7 suggestion
Lassi Kortela
(29 Oct 2019 18:07 UTC)
|
Re: s7 suggestion
John Cowan
(01 Nov 2019 21:27 UTC)
|
Re: s7 suggestion
Lassi Kortela
(01 Nov 2019 21:36 UTC)
|
Re: s7 suggestion
John Cowan
(01 Nov 2019 23:03 UTC)
|
&key vs :key in the lambda list
Lassi Kortela
(01 Nov 2019 23:17 UTC)
|
Re: &key vs :key in the lambda list
John Cowan
(01 Nov 2019 23:18 UTC)
|
Re: &key vs :key in the lambda list
Lassi Kortela
(01 Nov 2019 23:27 UTC)
|
Syntax for hygienic vs non-hygienic keywords
Lassi Kortela
(01 Nov 2019 23:33 UTC)
|
Re: allow-other-keys
bil@xxxxxx
(29 Oct 2019 19:51 UTC)
|
Re: s7 suggestion
Marc Nieper-Wißkirchen
(29 Oct 2019 16:33 UTC)
|
Re: s7 suggestion
Lassi Kortela
(29 Oct 2019 16:53 UTC)
|
Re: s7 suggestion
bil@xxxxxx
(29 Oct 2019 17:10 UTC)
|
Including 177 in s7?
Lassi Kortela
(29 Oct 2019 17:34 UTC)
|
> Thank you for including s7 in srfi-177. I thought you might like an > hygenic version of that code: Absolutely! Thank you for contributing it. > (define-macro (keyword-lambda formals-and-keys . body) > ((lambda (formals keyword-symbols) > `(with-let (unlet) ; or (inlet (unlet)) -- more explicit > (lambda* (,@formals ,@(map (lambda (sym) `(,sym #f)) > keyword-symbols)) > ,@body))) > (split-last formals-and-keys))) > "with-let" > evaluates its body in the given environment. s7 has > first-class environments, so it doesn't need define-syntax and > its friends. Very interesting! Does `unlet` get the global environment without any lexical bindings from `let` expressions around the macro call site, and that's why it's guaranteed to get the standard definition of `lambda*`? In that case, how does `body` get access to variables in a closure around the keyword lambda: (let ((base 123)) (keyword-lambda ((offset)) (+ base (or offset 0)))) > I think the keyword-call macro is already hygienic. That's my impression too since the macro doesn't add any of its own symbols to the expansion; it only adds keywords. > Here are tests, similar to yours: > > (define (writeln x) (write x) (newline)) > > (let ((lambda* gcd) > (list abs) > (a 321) > (split-last 42) > (cond if)) > (define y (keyword-lambda (a b (c d)) (list a b c d))) > (writeln (y 1 2)) > (writeln (keyword-call y 1 2 ())) > (writeln (keyword-call y 1 2 (c 3))) > (writeln (keyword-call y 1 2 (d 4 c 3)))) > > (set! list abs) > > (define z (keyword-lambda (a b (c d)) (list a b c d))) > (writeln (z 1 2)) > (writeln (keyword-call z 1 2 ())) > (writeln (keyword-call z 1 2 (c 3))) > (writeln (keyword-call z 1 2 (d 4 c 3)))) Thanks a lot! I don't have Docker set up right now, but I'll run these before submitting the next draft of the SRFI. Did you know we have a Docker container for s7 at <https://github.com/weinholt/scheme-docker/tree/s7>? Try `docker run -it weinholt/s7`.