[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 2/2] utils: Support defaults in substitute-keyword-arguments.
From: |
Ludovic Courtès |
Subject: |
Re: [PATCH 2/2] utils: Support defaults in substitute-keyword-arguments. |
Date: |
Sat, 24 Sep 2016 11:21:40 +0900 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/25.1 (gnu/linux) |
Eric Bavier <address@hidden> skribis:
> From: Eric Bavier <address@hidden>
>
> * guix/utils.scm (substitute-keyword-arguments): Allow default value
> declarations.
> * tests/utils.scm (substitute-keyword-arguments): New test.
Good idea!
[...]
> +replaced by EXP. EXP is evaluated in a context where VAR is bound to the
> +previous value of the keyword argument, or DFLT if given."
> + (syntax-case x ()
> + ((_ original-args ((kw var dflt ...) exp) ...)
> + #`(let loop ((args (default-keyword-arguments
> + original-args
> + (list #,@(append-map (match-lambda
> + ((k) '())
> + (x x))
> + #'((kw dflt ...) ...)))))
> + (before '()))
I would prefer to stick to ‘syntax-rules’ when matching the clauses,
with a helper macro:
(define-syntax expand-default-args
(syntax-rules ()
((_ original args ((kw var) expr) rest ...)
...)
((_ original args ((kw var default) expr) rest ...)
...)))
…
(syntax-rules ()
((_ original-args ((clause exp) ...)
(let loop ((args (expand-default-args original-args clause ...)))
…))))
But this would be a bonus; the patch LGTM.
Thanks!
Ludo’.