Deutsch   English   Français   Italiano  
<vbk67q$1u3dp$1@dont-email.me>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!weretis.net!feeder8.news.weretis.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: "B. Pym" <Nobody447095@here-nor-there.org>
Newsgroups: comp.lang.lisp,comp.lang.scheme
Subject: Re: MAP (and variants) vs LOOP - Popular opinion observation?
Date: Sun, 8 Sep 2024 12:44:44 -0000 (UTC)
Organization: A noiseless patient Spider
Lines: 63
Message-ID: <vbk67q$1u3dp$1@dont-email.me>
References: <vbk3vn$1tpt1$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Injection-Date: Sun, 08 Sep 2024 14:44:45 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="ca987dadbaef2aac0a61f448ffc30def";
	logging-data="2035129"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX19fO3U43fvFnvgbXsQBlomE"
User-Agent: XanaNews/1.18.1.6
Cancel-Lock: sha1:mOAWIdA+dawrGSrTbkrmb/8l0y0=
Bytes: 2319

B. Pym wrote:

> > Then suppose you later need the loop/map to collect some of the values
> > under certain conditions. You might have
> > 
> >    (loop for x in (get-list)
> >          for i from 0
> >          do (format t "~A - ~A~%" i x)
> >          if (test x)
> >          collect (foo x))
> 
> Gauche Scheme
> 
> (use srfi-13)  ;; string-upcase
> 
> (filter-map
>   (lambda (x i)  (print i " - " x)
>     (and (string? x) (string-upcase x)))
>   '(foo "an" 8 "why")
>   (lrange 0))
> 
> 0 - foo
> 1 - an
> 2 - 8
> 3 - why
> ("AN" "WHY")

> Suppose you have
> 
>    (loop for x in (get-list)
>          do (format t "~A~%" x))
> 
> and then it turns out you need to print a numeric index. You can do
> 
>    (loop for x in (get-list)
>          for i from 0
>          do (format t "~A - ~A~%" i x))
> 
> If you start with
> 
>    (mapc (lambda (x) (format t "~A~%" x)) (get-list))
> 
> it seems (to me) that it'd be harder to modify it as needed,
> 
>    (let ((list (get-list)))
>      (mapc (lambda (i x) (format t "~A - ~A" i x))
>            (range 0 (length list))
>            list))
> 
> (I'm assuming the toolkit includes a RANGE utility, or something similar.)

Gauche Scheme

Shorter than the loop:

(for-each
  (pa$  format #t "~a - ~a\n")
  (lrange 0)
  '(a b c))

0 - a
1 - b
2 - c