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