Re: Loopiness

Liste des GroupesRevenir à cl scheme 
Sujet : Re: Loopiness
De : 643-408-1753 (at) *nospam* kylheku.com (Kaz Kylheku)
Groupes : comp.lang.lisp comp.lang.scheme
Date : 27. Sep 2024, 02:13:00
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <20240926180921.249@kylheku.com>
References : 1
User-Agent : slrn/pre1.0.4-9 (Linux)
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.

Date Sujet#  Auteur
26 Sep 24 * Loopiness2B. Pym
27 Sep 24 `- Re: Loopiness1Kaz Kylheku

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal