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