• Re: Confused about Scheme...???

    From B. Pym@21:1/5 to All on Tue Aug 6 06:18:50 2024
    XPost: comp.lang.scheme

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

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From B. Pym@21:1/5 to B. Pym on Tue Aug 6 15:37:40 2024
    XPost: comp.lang.scheme

    B. Pym wrote:

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

    Shorter:

    (define (meld xs , K A B)
    (if (null? xs)
    '()
    (if (unify '((K A) (K B)) (0 2 xs))
    (begin (bind $it) (meld (cons (list K (+ A B)) (2 xs))))
    (cons (first xs) (meld (rest xs))))))

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)