Deutsch   English   Français   Italiano  
<vbuba3$68dk$1@dont-email.me>

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

Path: ...!news.nobody.at!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: Another code review perhaps?
Date: Thu, 12 Sep 2024 09:12:38 -0000 (UTC)
Organization: A noiseless patient Spider
Lines: 52
Message-ID: <vbuba3$68dk$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Injection-Date: Thu, 12 Sep 2024 11:12:38 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="0068c9cac97edf80ad7dcfbe07391a5a";
	logging-data="205236"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX1+Ftnz1bdTV5El6NRvNgwWz"
User-Agent: XanaNews/1.18.1.6
Cancel-Lock: sha1:M/Fm46qklSFwk+olJJ9Kd6rPW/E=
Bytes: 1846

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)))