| Deutsch English Français Italiano |
|
<20240926180921.249@kylheku.com> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!news.roellig-ltd.de!open-news-network.org!weretis.net!feeder8.news.weretis.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: Kaz Kylheku <643-408-1753@kylheku.com> Newsgroups: comp.lang.lisp,comp.lang.scheme Subject: Re: Loopiness Date: Fri, 27 Sep 2024 01:13:00 -0000 (UTC) Organization: A noiseless patient Spider Lines: 47 Message-ID: <20240926180921.249@kylheku.com> References: <vd4ior$cfmj$1@dont-email.me> Injection-Date: Fri, 27 Sep 2024 03:13:01 +0200 (CEST) Injection-Info: dont-email.me; posting-host="785518da76bda1deaa0450891ef936b3"; logging-data="470011"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19ctlCdABjLPwW4k40CplxqW+vGMhtjPss=" User-Agent: slrn/pre1.0.4-9 (Linux) Cancel-Lock: sha1:veZEo/C+tJu2PLQYVIfm3uwI+Jc= Bytes: 2300 On 2024-09-26, B. Pym <Nobody447095@here-nor-there.org> wrote: >> (loop for x in things >> when (foo-p x) collect x into foos >> when (bar-p x) collect x into bars >> when (and (foo-p x) (bar-p x)) collect x into both >> finally (return (values foos bars both))) > > It's shorter in Gauche Scheme. It's five physical nonblank lines of code. > > (define things '(0 3 -5 4 9 -7 6 8)) > > 1: (let@ (() odds posi both) > 2: (dolist (x things) > 3: (when (odd? x) (push! odds x)) > 4: (when (positive? x) (push! posi x) > 5: (when (odd? x) (push! both x)))) > 6: (values odds posi both)) > > (-7 9 -5 3) > (8 6 9 4 3) > (9 3) > > Given: > > 7: (define-macro let@ > 8: (lambda (lets . exprs) > 9: (let ((lets lets) > 10: (let-pairs '())) > 11: (if (list? lets) > 12: (while (pair? lets) > 13: (let ((x (pop! lets))) > 14: (cond > 15: ((not (symbol? x)) > 16: (while (pair? lets) > 17: (push! let-pairs (list (pop! lets) x)))) > 18: ((null? lets) (push! let-pairs (list x 0))) > 19: (#t (push! let-pairs (list x (pop! lets))))))) > 20: (set! let-pairs `((,lets 0)))) > 21: `(let* ,(reverse let-pairs) > 22: ,@exprs)))) How is twenty-two nonblank lines shorter than five? You are clearly not well.