2013-10-29 4 views
1

내 함수는 첫 번째 요소 인 기본 사례 만 반환합니다. 어쩌면 내가 내 재귀를 잘못하고 어쩌면 내가 lisp에서 함수에 대한 도움이 필요합니다.목록의 첫 번째 항목 만 반환하는 Scheme의 재귀 함수

함수는 10 진수로 변환 된 2 진수 목록의 모든 요소의 합계를 반환해야합니다. 목록의 각 요소를 소수 첫째 자리로 변환 한 다음 나머지가 전환 될 때 추가합니다. 나는 2 가지 기능을 가지고있다. 물론 첫 번째 작품, convertToBinary :

(define (binaryToDecimal n) 
    (cond [(zero? n) 0] 
     [else (+ (* 2 (binaryToDecimal (quotient n 10))) 
        (remainder n 10))] 
     )) 

하지 너무 잘 두 번째 :이 가진 함수를 호출 할 경우

(define (addBinary binaryList) 
    (cond [(null? (cdr '(binaryList))) (binaryToDecimal (car binaryList))] 
    [else 
    (cons (+ (binaryToDecimal (car binaryList)) 
       (addBinary (cdr '(binaryList)))))] 
    )) 

이 : 그럼

(addBinary '(1101 111 10 101)) 

를 내가 얻을 : 13. 어떤 1101 (내 목록의 첫 번째 요소)의 10 진수 변환입니다. 분명히 문제는 다른 상황에있는 것 같지만 문제가 보이지 않고 도움이 필요합니다. 나는 주변을 검색하고 "죄수"를 사용하여 적용된 변경 사항이있는 목록의 요소를 구성 (그렇게 말하기) 할 것이라고 읽었습니다. 이것이 맞는지 확실하지 않습니다. 감사!

답변

1

코드에 (cdr '(binaryList))이라는 몇 가지 인스턴스가 있는데, 이는 예상 한대로 수행되지 않습니다. 아마도 (cdr binaryList)을 대신 사용하려고했을 것입니다. 어쨌든 기본 케이스는 약간 펑키합니다. 기본 케이스는 빈리스트 여야하고 그 경우 0을 반환한다고 생각합니다.

(define (addBinary binaryList) 
    (cond ((null? binaryList) 0) 
     (else 
     (+ (binaryToDecimal (car binaryList)) 
      (addBinary (cdr binaryList)))))) 
+1

아 하! 그것은 그것을 고쳤다! 고마워요. 백만 장자입니다. 나는 머리를 벽에 치고 (문자 그대로는 아님) 한시간 동안 그것을 알아 내려고 노력했습니다. 그것은 어리석은 무언가 일 때 나를 죽인다;) –

관련 문제