guix-devel
[Top][All Lists]
Advanced

[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’.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]