Re: drop it

Liste des GroupesRevenir à cl lisp 
Sujet : Re: drop it
De : Nobody447095 (at) *nospam* here-nor-there.org (B. Pym)
Groupes : comp.lang.lisp
Date : 08. Aug 2024, 18:42:46
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <v92si3$40j1$1@dont-email.me>
User-Agent : XanaNews/1.18.1.6

Chris Russell wrote:

Drop every N'th element from a list.
Example:
* (drop '(a b c d e f g h i k) 3)
(A B D E G H K)
>
I'm guilty responding to a spammer, who doesn't help Lisp or OCaml by
posting wrong statements about it, so I'll solve your problem:
>
(defun drop (list n)
  (loop for item in list
        for i = 1 then (1+ i)
        when (/= (mod i n) 0) collect item))
>
Of course, in Haskell I can write it like this:
>
myDrop list n=[list!!x|x<-[0..length list-1], mod (1+x) n/=0]
>
and I'm sure this is not the shortest solution. But for me it is more
difficult to develop pure functional algorithms than using Lisp.
>
It is not that difficult.
>
(defun drop (list n)
  (labels ((drop-aux (list i)
             (cond ((null list) nil)
                   ((= i 1) (drop-aux (rest list) n))
                   (t (cons (first list)
                            (drop-aux (rest list) (1- i)))))))
    (drop-aux list n)))
>
There are many extra points to get for a version using 'Series'.
A few extra points for a tail-recursive version.
>
Or you can take this one:
>
(defun every-nth (n)
  (let ((i n))
    (lambda ()
      (prog1 (= i 1)
        (decf i)
        (when (zerop i)
          (setf i n))))))
>
Above returns a function that returns T for every n-th call.
>
(defun drop (list n)
  (remove-if (every-nth n) list))
>
--http://lispm.dyndns.org
 
Obligatory 1 line solution using map__:
 
(defun remove-nth(n list)
   (mapcan (let ((tick 0))(lambda(x) (when (/= 0 (rem (incf tick) n))
(list x)))list))

newLISP

(define (remove-nth n lst  , i)
  (clean (fn() (= 0 (mod (++ i) n))) lst))

(remove-nth 3 '(a b c d e f g h i j k))

(a b d e g h j k)

Date Sujet#  Auteur
8 Aug 24 o Re: drop it1B. Pym

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal