이제 작성 했으므로 코드는 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
이 숙제이기 때문에, 나는 명시 적으로 당신을 위해이 문제를 해결하지 않을 것이다, 그러나 당신의 대답은 본질적으로 같은 형식이어야 요소를 계산, 당신은 다른 술어에게 필요한 것 실제로 추가 할 것인지 아닌지를 결정합니다.
':
이 프로 시저를 테스트하기 위해이 예제를 사용하여 쌍? "인수에. –
어떻게 모든 쌍의 루프를 만들 수 있습니까? – LinkToThePast
재귀 사용 ... –