2009-10-16 3 views
1

이제 Scheme에서 내 네 번째 질문인데, 하위 기능 I asked earlier을 하루 동안 필요로 했으므로 Scheme에서 아직 꽤 새로운 것입니다.스키마에서 Mulitpule Caulated 값을 할당하는 방법

기본적으로 이것은 2 개의 목록의 차이점을 반환합니다. 그 w

-l 사이의 거리가있어 당신이 (1,5)(5,1)있어 말이 기능은 여기에 내가 무엇을 가지고 나에게 8을 반환해야합니다. 참고 : (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> 

을 반환 어떤 아이디어? 람다를 사용하려고하면 같은 일이 끝납니다.

+0

누군가 ?? help plz – Jonathan

+0

나는 당신의 기능이 무엇을하려고하는지 잘 모르겠다. –

+0

기본적으로 2 목록에서 2 항목의 차이를 계산하려고합니다. 목록 A의 첫 번째 항목에서 1 개, 목록 B의 첫 번째 항목에서 2 개가 있다고 가정 해보십시오. 어느 것이 더 큰지 먼저 확인한 다음 빼기를 수행하면 목록의 첫 번째 항목의 차이점이 반환됩니다. 목록의 두 번째 항목과 동일합니다. 두 숫자를 모두 합하면 총 차이가 생깁니다. 제 경우에는 A에서 B까지의 거리가 – Jonathan

답변

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

+0

그런 식으로 ...? –

+0

이상한 cdr을 사용하지 않은 이유는 자동차가 나에게 숫자를 반환하기 때문에 cdr이 나를 하나의 목록으로 돌려주기 때문입니다. 그렇기 때문에 list-ref를 사용하여 계산을 할 수 있는지 확인하십시오. – Jonathan

0

나는 이전의 질문이지만이 글을 썼다. 내 솔루션은 여기

(define (difference l1 l2) 
    (apply + (map abs (map - l1 l2)))) 
관련 문제