Jonathan
Jonathan

Reputation: 608

How to Assign Mulitpule Caulated Value Into List in Scheme

Okay this is my 4th question today on Scheme, still pretty new to Scheme, as I needed for one of my sub-function I asked earlier in the day.

Basically this will return me the difference of 2 lists. Say you've got (1,5) and (5,1) this function should return me 8. As that's the distance between l to w

Here is what I have. Note: if I change the (list (- (car l) (car w))) into (write ..... ) the function will work, but outputs 2 number which I have no idea how to use those number as inputs of my other function.

So I try to put it into list, but doesn't really work out, it returns me with no error but weird stuff

(define (difference l w) ; calc heuristic function estimation
    (if (> (car l) (car w))
        (list (- (car l) (car w)))
        (if (< (car l) (car w))
        (list (- (car w) (car l)))))
        (if (< (list-ref l 1) (list-ref w 1))
            (list (- (list-ref l 1) (list-ref w 1)))
            (if (> (list-ref l 1) (list-ref w 1))
                (list (- (list-ref w 1) (list-ref l 1)))))
   )

Here is the code returned me

> (difference '(9 1) '(3 1))
#<procedure:...0\assigment 2.ss:50:3>

Any ideas? try to use lambda end-up the same thing.

Upvotes: 1

Views: 185

Answers (2)

Marty Neal
Marty Neal

Reputation: 9543

I know it's an old question, but I just wrote something like this. Here's my solution

(define (difference l1 l2)
  (apply + (map abs (map - l1 l2))))

Upvotes: 0

Andrew Song
Andrew Song

Reputation: 3128

Well first of all, there's a typo in your code...

(lits (- (car w) (car l)))))

should be...

(list (- (car w) (car l)))))

EDIT: Would something like this work?

(define (difference lst1 lst2) 
    (if (> (car lst1) (car lst2))
        (+ (- (car lst1) (car lst2)) (difference (cdr lst1) (cdr lst2)))
        (+ (- (car lst2) (car lst1)) (difference (cdr lst1) (cdr lst2))))
)

Upvotes: 1

Related Questions