Deutsch   English   Français   Italiano  
<v8sf86$1f6im$1@dont-email.me>

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

Path: ...!3.eu.feeder.erje.net!feeder.erje.net!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: Confused about Scheme...???
Date: Tue, 6 Aug 2024 06:18:50 -0000 (UTC)
Organization: A noiseless patient Spider
Lines: 45
Message-ID: <v8sf86$1f6im$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Injection-Date: Tue, 06 Aug 2024 08:18:51 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="59d6c6aa30eb0502f9bfd8ce98c9d6f2";
	logging-data="1546838"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX1/0QTV6zJZST9c8jkwbQSIF"
User-Agent: XanaNews/1.18.1.6
Cancel-Lock: sha1:TidOXieeIEK9sn/qUE5d7QwPhFc=
Bytes: 2357

>     In short, 'reduce-list', is take a list of variable length, 'b',
> below and reduce it if the (caar ls) and (caadr ls) are equal...this
> is the first atom within the pair of consecutive sublists and if this
> is true contruct a list,  (list (caar ls) (+ (cadar ls) (cadadr ls)))
> , and add second atom of the consective pairs.  For example,
> (reduce-list b) ==> ((4 3) (3 7) (2 1) (1 2) (0 1)).  I can get it to
> work for the first two terms without using recursion, produces (4 3),
> but when I implement recursion it barfs.  Could some one tell me what
> I'm doing wrong because I know that I'm trying to do to much at once?
> 
> 
> -Conrad
> 
> 
> (define (reduce-list ls)
>     (cond ((null? ls) ls)
>     (else
>       (cond ((null? (cadr ls)) ls)
>       (else
>         (cond ((eq? (caar ls) (caadr ls))
>                  (list (caar ls) (+ (cadar ls) (cadadr ls)))
>                  (reduce-list (cdr ls)))
>               (else (list (car ls) (reduce-list (cdr ls)))))))))))
> 
> 
> (define b '((4 1) (4 2) (3 3) (3 4) (2 1) (1 2) (0 1)))
> 
> (reduce-list b)

newLISP

(define b '((4 1) (4 2) (4 80) (3 3) (3 4) (2 6) (9 2) (9 5)))

(define (meld xs)
  (local (K A B)
    (if (null? xs)
      '()
      (let (u (unify '((K A) (K B)) (0 2 xs)))
        (if u
          (begin (bind u) (meld (cons (list K (+ A B)) (2 xs))))
          (cons (first xs) (meld (rest xs))))))))

(meld b)

((4 83) (3 7) (2 6) (9 7))