2016-09-26 2 views
-1

다음은 this question의 후속 조치입니다.목록의 목록을 반복적으로 거쳐 다른 방법으로 목록을 결합하는 방법

빈 목록에 함께 추가되는 목록 또는 "레코드"가 있습니다. 형식은 각각 (Matthew (AL 21 32))입니다. 지금은 원하는 레코드를 찾은 다음 레코드 내부의 두 숫자를 곱하기 위해 fetchRecord을 사용할 함수를 작성하려고합니다. 그러나 현재 코드는 첫 번째 레코드에서 이름을 가져 오는 경우에만 작동하지만 이후에는 모든 레코드에 대해 빈 목록을 반환합니다. 여기 내 코드 :

(define (Mult_Num name) 
    (cond 
    [(empty? db) #f] 
    [else (* (car(cdr(car(cdr (fetchRecord name))))) 
      (car(cdr(cdr(car(cdr (fetchRecord name)))))))])) 

어떻게 수정하나요? 또한 특정 레코드에 두 개의 데이터 세트가있는 경우 : (John (AL 25 40) (CA 40 67)) 그러면 25 * 40과 40 * 67 등을 모두 얻을 수 있으며 두 세트 이상의 데이터가있는 경우에도 어떻게됩니까? 나는 그것이 재귀가 될 것이라고 이해하지만 당신이 그것을 어떻게 설정할 것인지는 잘 모르겠습니다.

이 내 fetchRecord 기능입니다 : 이것은 또한 관련이있을 수

(define (fetchRecord name) 
    (cond 
    [(empty? db) #f] 
    [(equal? (car (car db)) name) (car db)] 
    [else(car (car db)) name (cdr db)])) 

: 또한 내가 이것을 가지고 있지만

(define db '()) 

내가 나사 자체를 여기에 두 개 이상의 이름이있는 경우 :

(define(showRec name) ;displays everything following a name. 
    (cond 
    [(empty? db) #f] 
    [(equal? (car (car db)) name) (cdr (fetchRecord name))] 
    [else (cdr (car(fetchRecord name)))]) 
) 
+0

함수 (이 경우'Bill_Amt')가 자신을 호출하지 않으면 재귀가 발생하지 않습니다. –

+0

@ScottHunter 재귀를 시작하기 전에 무엇이 잘못되었는지 알아 내려고 노력하고 있습니다. 오류가 계속 발생하기 때문입니다. – Mkodamore

+0

질문이 지금과 같이 명확하지 않아 [최소, 완전하고 검증 가능한 예제를 만드는 방법] (http://stackoverflow.com/help/mcve)의 도움말을 읽어보십시오. – Renzo

답변

0

가장 큰 문제는 fetchRecord에 의존한다는 것입니다. 유효한 방식은 아니다 다음 else 절은 3

뿐만 아니라 1 인수를해야 그리고 당신은 재귀를 사용하는 것이 함수의 rest을 처리하지 않습니다 목록의 rest를 처리 할 것을 놀라지 않을한다 재귀를 사용하지 않는 경우의리스트

관련 문제