2012-04-30 3 views
1

저는 입력이있는 쌍의 수를 계산해야하는 과제가 있습니다.스키마의 쌍 수를 계산하십시오.

(define x 0) 

(define number-of-pairs 
    (lambda (v) 
    (if (pair? v) 
     (+ x 1) 
     (+ x 0)))) 

을 그리고 다음과 같이 내가 그것을 사용 :

내가 지금까지 무엇을 가지고

다음
(number-of-pairs (cons (cons 'a 'b) 'c)) 

는 2를 생산해야하지만, 그것은 단지 가서 대신, 1 생산 함수를 통해 한 번. 나는 아무 짝이없는 것이기 때문대로, 0 생산

(number-of-pairs 10) 

시도하십시오.

+0

':

(define (number-of-pairs v) (if (not (pair? v)) <???> (+ <???> (number-of-pairs <???>) (number-of-pairs <???>)))) 

이 프로 시저를 테스트하기 위해이 예제를 사용하여 쌍? "인수에. –

+0

어떻게 모든 쌍의 루프를 만들 수 있습니까? – LinkToThePast

+1

재귀 사용 ... –

답변

5

두 가지 사례를 고려해야합니다 :

  1. 어떻게됩니까 현재 요소 한 쌍의가 아닌 경우?
  2. 현재 요소 인 경우 어떻게됩니까?

두 번째 경우에는 현재 요소가 쌍임을 알기 때문에 합계에 하나를 더할 수 있습니다. 그런 다음 쌍의 두 부분 모두에서 재귀를 호출합니다. 그 중 하나가 차례대로 쌍입니다.

여기해야할 일들의 일반적인 생각, 채우기에 공백이 코드는 호출을 제외한 기본적으로 아무것도하지 않는

(number-of-pairs 10) 
> 0 

(number-of-pairs (cons (cons 'a 'b) 'c)) 
> 2 

(number-of-pairs '(a b c)) 
> 3 

(number-of-pairs (cons 'a (cons 'b (cons (cons 'c (cons (cons 'd '()) '())) '())))) 
> 6 
+0

stealin '내 모든 포인트 :) – oobivat

2

힘을 사용하여, 루크!

오류. 디자인 레시피를 사용하는 것입니다.

페이지의 섹션 9.3 및 프로그램을 설계하는 방법에 9.4 : 당신이 HTDP에 익숙하지 않은 경우

http://htdp.org/2003-09-26/Book/curriculum-Z-H-13.html#node_sec_9.3

그 철학은 당신에게 체계적으로 단지 예를들보다는 프로그램을 작성하는 도구를 제공하는 것입니다.

0

이제 작성 했으므로 코드는 1이나 0 만 반환합니다.이 절차를 의도 한대로 작동 시키려면 구성표에 대한 두 가지 중요한 사항, 즉 재귀 호출의 작동 방식과 할당 작동 방식을 이해해야합니다. .

할당 :

나는 assignment in scheme 매우 심도있는 분석을 썼다, 그러나이 경우 짧은 버전은 (+ x 1)를 호출 할 때 x의 값을 변경하지 않는 것입니다. scheme의 바인딩 값을 실제로 변경하려면 set! 프로 시저를 사용해야합니다 (그러나이 경우 실제로 그렇게 할 필요는 없습니다).

재귀 : 당신이 자체 내에서 프로 시저를 호출 할 때 재귀이라고

기억합니다. 재귀 적 솔루션에는 null 값과 감소 수식의 두 가지 요소가 필요합니다.

덧셈 또는 뺄셈의 경우 null 값은 0이고, 곱셈의 경우 1입니다. cons의 경우는 '()입니다.

감소 공식은 문제를 간단한 조각으로 분해하는 방법 또는 각 단계에서 문제를 해결하는 방법을 나타냅니다.

예 :

(define count-elements 
    (lambda (lst) 
     (if (null? lst) 0 ; <-- I'm done? return the null value 
      (+ 1 (count-elements (cdr lst)))))) ;<-- otherwise +1 and reduce the problem 

이 숙제이기 때문에, 나는 명시 적으로 당신을 위해이 문제를 해결하지 않을 것이다, 그러나 당신의 대답은 본질적으로 같은 형식이어야 요소를 계산, 당신은 다른 술어에게 필요한 것 실제로 추가 할 것인지 아닌지를 결정합니다.

관련 문제