| Deutsch English Français Italiano |
|
<1039q08$o8dh$1@dont-email.me> View for Bookmarking (what is this?) Look up another Usenet article |
Path: news.eternal-september.org!eternal-september.org!.POSTED!not-for-mail
From: "B. Pym" <Nobody447095@here-nor-there.org>
Newsgroups: comp.lang.lisp,comp.lang.scheme
Subject: Re: Learning Lisp in Linux?
Date: Sun, 22 Jun 2025 20:44:57 -0000 (UTC)
Organization: A noiseless patient Spider
Lines: 55
Message-ID: <1039q08$o8dh$1@dont-email.me>
References: <vals69$36dse$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Injection-Date: Sun, 22 Jun 2025 22:44:58 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="f333d4e956116c873f4f35d019e51465";
logging-data="795057"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1853NjwSlPgu5b4cJBVGxMl"
User-Agent: XanaNews/1.18.1.6
Cancel-Lock: sha1:cRHacBUHiwj4kAafqKR/F+TvBZ0=
B. Pym wrote:
> Pascal Costanza wrote:
>
> > > I'm not advocating tail-recursion instead of specialized iteration
> > > mechanisms closer to the problem domain. I'm just saying tail-
> > > recursion code isn't anywhere as low-level as you're making it up to
> > > be.
> >
> > It actually is, and your posting below shows it very nicely.
> >
> > >> Here is a nice example using loop:
> > > >
> > >> (loop for (key value) on property-list by #'cddr
> > >> unless (member key excluded-keys)
> > >> append (list key value)) ; [1]
> >
> > As a function:
> >
> > (defun filter (excluded-keys property-list)
> > (loop for (key value) on property-list by #'cddr
> > unless (member key excluded-keys)
> > nconc (list key value)))
> >
> > > (filter '(c d) '(a 1 b 2 b 3 c 4 d 5 c 6))
> > (A 1 B 2 B 3)
> >
> > The result is a correct property list
>
> Gauche Scheme
>
> (define (remove-props bad-keys prop-list)
> (concatenate
> (remove (^p (member (car p) bad-keys))
> (slices prop-list 2))))
>
> (remove-props '(c d) '(a 1 b 2 b 3 c 4 d 5 c 6))
> ===>
> (a 1 b 2 b 3)
Using "is":
(define (remove-props bad-keys prop-list)
(concatenate
(remove (is car member bad-keys)
(slices prop-list 2))))
Given:
(define is
(case-lambda
[(x) (lambda(y) (equal? y x))]
[(pred x) (lambda(y) (pred y x))]
[(key pred x) (lambda(y) (pred (key y) x))]))