Rocksolid Light

News from da outaworlds

mail  files  register  groups  login

Message-ID:  

You will win success in whatever calling you adopt.


comp / comp.lang.lisp / Re: tail recursion guidelines

SubjectAuthor
o Re: tail recursion guidelinesB. Pym

1
Subject: Re: tail recursion guidelines
From: B. Pym
Newsgroups: comp.lang.lisp, comp.lang.scheme
Organization: A noiseless patient Spider
Date: Thu, 12 Sep 2024 10:59 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: tail recursion guidelines
Date: Thu, 12 Sep 2024 10:59:41 -0000 (UTC)
Organization: A noiseless patient Spider
Lines: 40
Message-ID: <vbuhir$7h42$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Injection-Date: Thu, 12 Sep 2024 12:59:42 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="0068c9cac97edf80ad7dcfbe07391a5a";
logging-data="246914"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/+puBN5kTNQCK51QZ70gqQ"
User-Agent: XanaNews/1.18.1.6
Cancel-Lock: sha1:K/I7ghKjYFQqZJVz4CY+Qmzc8Ug=
View all headers

Juho Snellman wrote:

> One useful detail that I didn't see mentioned in that chapter is the
> loop keyword "it". I find that it pops up often in code like
>
> (let ((x ...))
> ...
> (loop for e in list when (foo-bar e x) collect it))
>
> , where foo-bar returns nil on failure and some sort of state object
> otherwise.

Gauche Scheme

(define (foo-bar x) (and (positive? x) (sqrt x)))

(filter-map foo-bar '(-3 0 4 9))
===>
(2 3)

Here's an anaphoric "if" that provides "it".
(Adapted from an example in the Gauche documentation.)

(use util.match)

(define-syntax if@
(er-macro-transformer
(lambda (form rename id=?)
(match form
[(if@ test expr1 expr2)
(quasirename rename
`(let ((,'it ,test))
(if ,'it ,expr1 ,expr2)))]))))

(if@ (find odd? '(2 3)) (print it) (print "false is " it))
3

(if@ (find odd? '(2 30)) (print it) (print "false is " it))
false is #f

1

rocksolid light 0.9.8
clearnet tor