Re: (loop initially ... getting non-ANSI CL warning

Liste des GroupesRevenir à cl lisp 
Sujet : Re: (loop initially ... getting non-ANSI CL warning
De : Nobody447095 (at) *nospam* here-nor-there.org (B. Pym)
Groupes : comp.lang.lisp
Date : 07. Aug 2024, 09:53:18
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <v8v95c$2bgqc$1@dont-email.me>
User-Agent : XanaNews/1.18.1.6
Ken Tilton wrote:

Mirko.Vukovic@gmail.com wrote:
Hi,
>
I am still in a bit of shock that my first loop attempt works, with
one legalistic exception.
>
This is my simple code to show duplicates in a list:
>
(defun show-duplicates (list)
  (loop
     initially with ref = (first list)
 
That is a blank initially clause. CLisp is being nice and coping with
that and pretending you just wrote (loop with ref = (first list)....
 
     for entry in (rest list) do
       (if (equal ref entry)
         (print entry))
 
Using when when when is suitable makes code more readable.
 
       (setf ref entry)))
 
Loop is pretty powerful so you should have a nervous feeling when you
find yourself setfing key iteration variables.
 
It looks as if you are assuming a sorted list and simply printing out
elements the same as the preceding element:
 
    (loop for (a b) on list
          when (eql a b)
          do (print b))
 
You get an extra iteration on the last element and nil so an input list
of '(nil nil) would print an extra duplicate. If that is a problem you can:
 
   (loop for a in list
         for b in (cdr list) ; this will run out first and halt the loop
         when (eql a b)
         do (print b))

(setq list '(0 0 0 2 3 4 4 5 6 6 6))

(loop for a in list
     for b in (cdr list) ; this will run out first and halt the loop
     when (eql a b)
     do (print b))

0
0
4
6
6


newLISP

(setq lst '(0 0 0 2 3 4 4 5 6 6 6))

(apply (fn (a b)(if (= a b) (println a)) b) lst 2)

0
0
4
6
6

Date Sujet#  Auteur
7 Aug 24 o Re: (loop initially ... getting non-ANSI CL warning1B. Pym

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal