Re: Python syntax in Lisp and Scheme

Liste des GroupesRevenir à cl scheme 
Sujet : Re: Python syntax in Lisp and Scheme
De : Nobody447095 (at) *nospam* here-nor-there.org (B. Pym)
Groupes : comp.lang.lisp comp.lang.scheme
Date : 13. Sep 2024, 21:22:53
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <vc23eb$10ri2$1@dont-email.me>
User-Agent : XanaNews/1.18.1.6
Pascal Costanza wrote:

What about dealing with an arbitrary number of filters?
 
(defmacro predicate-collect (list &body predicates)
   (let ((collectors (mapcar (lambda (predicate)
                                (declare (ignore predicate))
                                (gensym "COLLECT"))
                             predicates))
         (collect-t (gensym "COLLECT")))
      `(with-collectors (,@collectors ,collect-t)
          (dolist (l ,list)
            (cond ,@(mapcar (lambda (predicate collector)
                              `((funcall ,predicate l) (,collector l)))
                             predicates collectors)
                  (t (,collect-t l)))))))
 
An example:
 
 > (predicate-collect '(-5 -4 -3 -2 -1 0 1 2 3 4 5)
     (function evenp)
     (lambda (n) (< n 0))
     (lambda (n) (> n 3)))
(-4 -2 0 2 4)
(-5 -3 -1)
(5)
(1 3)
 
 
I use the list collector macros by Tim Bradshaw here - see
http://www.tfeb.org/lisp/hax.html#COLLECTING

Gauche Scheme

(define (multi-partition the-list . predicates)
  (if (null? predicates)
    (list the-list)
    (receive (yes no)
      (partition (car predicates) the-list)
      (cons yes (apply multi-partition no (cdr predicates))))))

(multi-partition '(-5 -4 -3 -2 -1 0 1 2 3 4 5)
  even?
  (is < 0)
  (is > 3))

((-4 -2 0 2 4) (-5 -3 -1) (5) (1 3))

Given:

(define-syntax is
  (syntax-rules ()
    [(is x)
     (lambda (y) (equal? y x))]
    [(is compare x)
     (lambda (y) (compare y x))]
    [(is key compare x)
     (lambda (y) (compare (key y) x))]))

Date Sujet#  Auteur
13 Sep21:22 o Re: Python syntax in Lisp and Scheme1B. Pym

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal