Discussion:
Confused about Scheme...???
(too old to reply)
B. Pym
2024-08-06 06:18:50 UTC
Permalink
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))
B. Pym
2024-08-06 15:37:40 UTC
Permalink
Post by B. Pym
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))))))

Loading...