2009-10-16 39 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))))