Subject: [bug#39599] [PATCH 1/4] build-system: Add copy-build-system.

From: Ricardo Wurmus <[email-masked]>
Date: Thu, 20 Feb 2020 10:47:10 +0100

Pierre Neidhardt <[email-masked]> writes:

> +  (define* (make-file-predicate matches matches-regexp #:optional (default-value #t))
> +    (if (or matches matches-regexp)
> +        (lambda (file)
> +          (any (lambda (pred) (pred file))
> +               (append
> +                (map (lambda (str)
> +                       (lambda (f) (string-suffix? str f)))
> +                     (or matches '()))
> +                (map (lambda (regexp)
> +                       (lambda (f) (regexp-exec (make-regexp regexp) f)))
> +                     (or matches-regexp '())))))
> +        (const default-value)))

This looks too complicated.

I think this is clearer:

--8<---------------cut here---------------start------------->8---
(define* (make-file-predicate suffixes matches-regexp #:optional (default-value #t))
  (if (or suffixes matches-regexp)
      (let* ((suffixes (or suffixes '()))
             (regexps (map make-regexp (or matches-regexp '())))
             (predicates (append
                          (map (lambda (str)
                                 (cut string-suffix? str <>))
                               suffixes)
                          (map (lambda (regexp)
                                 (cut regexp-exec regexp <>))
                               regexps))))
        (lambda (file)
          (any (cut <> file) predicates)))
      (const default-value)))
--8<---------------cut here---------------end--------------->8---

Also, as Mathieu wrote, please don’t use SET!.

-- 
Ricardo