Re: Another code review perhaps?

Liste des GroupesRevenir à cl lisp 
Sujet : Re: Another code review perhaps?
De : 643-408-1753 (at) *nospam* kylheku.com (Kaz Kylheku)
Groupes : comp.lang.lisp comp.lang.scheme
Date : 12. Sep 2024, 14:22:24
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <20240912051355.168@kylheku.com>
References : 1
User-Agent : slrn/pre1.0.4-9 (Linux)
On 2024-09-12, B. Pym <Nobody447095@here-nor-there.org> wrote:
Arthur Lemmens wrote:
>
Define iterative and recursive versions of a function that takes an
object x and a vector v, and returns a list of all the objects that
immediately precede x in v.
 
Graham doesn't like LOOP, but I do. So here's a LOOP-version:
 
(defun precedes (object vector)
  (loop for x across vector
        and i from 0
        when (and (equal x object) (> i 0))
        collect (elt vector (1-i))))
>
>
Look at that:
>
(1-i)
>
Don't you think that that should be:
>
(1- i)
>
or
>
(- i 1)
>
?
>
It's shorter when you use a Lispy language instead of CL.
>
Gauche Scheme
>
(use srfi-42) ; list-ec
>
(define (precedes obj vec)
  (list-ec (: x (index i) vec)
    (if (and (> i 0) (equal? x obj)))
    (ref vec (- i 1))))
>
(precedes 5 #(5 0 4 5 8 9 5))
 ===>
(4 9)
>
Another way:
>
(define (precedes o v)
  (let ((l (vector->list vec)))
    (filter-map
      (^(a b) (and (equal? o a) b))
      (cdr l)
      l)))

1> (match @(scan-all (@x 5 . @nil)) '(5 0 4 5 8 9 5) x)
(4 9)
2> (window-mappend 1 nil (do if (and @1 (= @2 5)) (list @1)) #(5 0 4 5 8 9 5))
#(4 9)


--
TXR Programming Language: http://nongnu.org/txr
Cygnal: Cygwin Native Application Library: http://kylheku.com/cygnal
Mastodon: @Kazinator@mstdn.ca

Date Sujet#  Auteur
12 Sep 24 * Re: Another code review perhaps?2B. Pym
12 Sep 24 `- Re: Another code review perhaps?1Kaz Kylheku

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal