2009-10-16 50 views
1

好的,這是我今天在Scheme中的第4個問題,對於Scheme還是很新的,因爲我需要在當天使用我的子功能I asked earlier之一。如何在計劃中將Mulitpule計算的值分配到列表中

基本上這將返回2個列表的差異。說你有(1,5)(5,1)這個功能應該還給我8。由於對w

l之間的距離,這是我有。注意:如果我將(list( - (car l)(car w)))更改爲(write .....),該函數將起作用,但輸出2個數字,我不知道如何將這些數字用作輸入我的其他功能。

所以我儘量把它放進名單,但並沒有真正奏效,它返回我沒有錯誤,但奇怪的東西

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

下面是代碼返回我

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

有任何想法嗎?嘗試使用lambda結束同樣的事情。

+0

某人?幫助plz – Jonathan 2009-10-16 18:27:22

+0

我不太確定我瞭解你的功能正在嘗試做什麼。 – 2009-10-16 18:28:52

+0

基本上我試圖從2個列表中計算2個項目的差異。假設我從列表A中的第一個項目中獲得1,並從列表B中的第一個項目中獲得1個。我想先查看哪一個更大,然後做減法,它會返回列表中第一項的差異。與列表的第二項相同的東西。 一旦我得到兩個數字,我把它們加在一起我得到了總差異,在我的情況下,從A到B的距離 – Jonathan 2009-10-16 18:40:14

回答

1

那麼首先,有一個在你的代碼一個錯字...

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

應該是...

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

編輯:請問像這樣的工作?

(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)))) 
) 
+0

oopz我正在使用寫,而不是它工作正常,但我不能使用輸出到任何輸入。我沒有用寫功能或顯示功能。所以我嘗試使用缺點,追加,列表他們都沒有工作 – Jonathan 2009-10-16 18:37:33

+0

這樣的事情......? – 2009-10-16 19:03:02

+0

我沒有使用cdr的奇怪是因爲汽車還給我一個數字而不是cdr返回我一個數列表。這就是爲什麼我使用list-ref來確保我可以計算 – Jonathan 2009-10-16 19:49:14

0

我知道這是一個老問題,但我只是寫了這樣的東西。這是我的解決方案

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