Path: nntp.eternal-september.org!news.eternal-september.org!eternal-september.org!.POSTED!not-for-mail From: "B. Pym" Newsgroups: comp.lang.lisp Subject: Re: Loop? ptooey Date: Sun, 6 Jul 2025 12:31:06 -0000 (UTC) Organization: A noiseless patient Spider Lines: 62 Message-ID: <104dqa8$26hed$1@dont-email.me> References: <1034o9e$9uii$1@dont-email.me> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Injection-Date: Sun, 06 Jul 2025 14:31:06 +0200 (CEST) Injection-Info: dont-email.me; posting-host="6946e6d5bd1474bb6d64b1a7e7254585"; logging-data="2311629"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+qztcP0YE6xur1bTs7Au0O" User-Agent: XanaNews/1.18.1.6 Cancel-Lock: sha1:SYRdES6AqR8P7ctlXdlEAxkzWVA= B. Pym wrote: > > Kenny Tilton wrote: > > > > > > KMP: The example you cite is quite simplistic.....snip...A > > > > loop like this: > > > > > > > > (loop for x from 0 > > > > for y in some-list > > > > when (good-result? y) > > > > collect (list x y)) > > > > > > > > is easy to write and maintain, and much easier to explain than the > > > > equivalent, but more Lispy: > > > > > > > > (do ((x 0 (+ x 1)) > > > > (y-list some-list (cdr y-list)) > > > > (result '())) > > > > ((null y-list) ;; [fixed] > > > > (nreverse result)) > > > > (let ((y (first y-list))) > > > > (when (good-result? y) > > > > (push (list x y) result)))) > > > > > > Ugh. Howse about: > > > > > > (let ((goody-pos -1) > > > goodies) > > > (dolist (it some-list (nreverse goodies)) > > > (incf goody-pos) > > > (when (good-result? it) > > > (push (list goody-pos it) goodies)))) > > > > > > perhaps i will be swayed someday by the charms of loop, but i gotta > > > tell you, i just don't get it. is loop for people who can't read lisp? > > > can't be, lisp is easier to read than loop. stumped. > > Gauche Scheme: > > (use gauche.collection) ;; size-of > > (filter-map > (lambda (x i) > (and (> (size-of x) 1) (list i x))) > '("a" "or" "I" "can" "o" "burn") > (liota)) > > ===> > ((1 "or") (3 "can") (5 "burn")) (use srfi-42) ;; list-ec (define some-list '((d) () (g) (o) () (w))) (list-ec (:list x (index i) some-list) (if (pair? x)) (list i x)) ===> ((0 (d)) (2 (g)) (3 (o)) (5 (w)))