Rocksolid Light

News from da outaworlds

mail  files  register  groups  login

Message-ID:  

This was the most unkindest cut of all. -- William Shakespeare, "Julius Caesar"


comp / comp.lang.lisp / Re: Python syntax in Lisp and Scheme

SubjectAuthor
o Re: Python syntax in Lisp and SchemeB. Pym

1
Subject: Re: Python syntax in Lisp and Scheme
From: B. Pym
Newsgroups: comp.lang.lisp, comp.lang.scheme
Organization: A noiseless patient Spider
Date: Fri, 13 Sep 2024 19:22 UTC
Path: eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: Nobody447095@here-nor-there.org (B. Pym)
Newsgroups: comp.lang.lisp,comp.lang.scheme
Subject: Re: Python syntax in Lisp and Scheme
Date: Fri, 13 Sep 2024 19:22:53 -0000 (UTC)
Organization: A noiseless patient Spider
Lines: 58
Message-ID: <vc23eb$10ri2$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Injection-Date: Fri, 13 Sep 2024 21:22:53 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="b23a757b35dd03cbd4947edb1cfbe6d8";
logging-data="1076802"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX194+YHi2/nMzAzxEeH+bOgi"
User-Agent: XanaNews/1.18.1.6
Cancel-Lock: sha1:nqcNMQiVGskEHIXpBLKY3OSnczU=
View all headers

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))]))

1

rocksolid light 0.9.8
clearnet tor