Re: processing a sequence

Liste des GroupesRevenir à cl scheme 
Sujet : Re: processing a sequence
De : Nobody447095 (at) *nospam* here-nor-there.org (B. Pym)
Groupes : comp.lang.lisp comp.lang.scheme
Date : 31. Aug 2024, 00:10:07
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <vatfvt$loks$1@dont-email.me>
User-Agent : XanaNews/1.18.1.6
joswig@....  wrote:

I am trying to process a sequence like:
>
(0 1 2 3 0 1 2 3 0 1 2 3)
>
and produce:
>
((0 1 2 3)(0 1 2 3)(0 1 2 3))
>
i.e. create sub-sequences beginning whenever the value decreases.
>

Gauche Scheme

(monotonic-slices '(0 1 2 3 0 1 2 3 0 1 2 3) + >)

  ===>
((0 1 2 3) (0 1 2 3) (0 1 2 3))


Given:

(define (each-mono-slice func LST :optional (KEY-FUNC values) (CMP equal?))
  (let ((RESULT '())  (TMP '())  (OLD-KEY 0)  (NEW-KEY 0))
    (dolist (X LST)
      (set! NEW-KEY (KEY-FUNC X))
      (cond ((null? TMP) (push! TMP X))
            ((CMP NEW-KEY OLD-KEY)
             (push! TMP X))
            (#t (func (reverse TMP)) (set! TMP (list X))))
      (set! OLD-KEY NEW-KEY))
    (unless (null? TMP) (func (reverse TMP)))
    (reverse RESULT)))

(define (monotonic-slices LST :optional (KEY-FUNC values) (CMP equal?))
  (let ((result '()))
    (each-mono-slice (lambda(xs) (push! result xs)) LST KEY-FUNC  CMP)
    (reverse result)))

Date Sujet#  Auteur
31 Aug 24 o Re: processing a sequence1B. Pym

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal