저는 방금 오늘 스킴을 배우기 시작합니다.스킴 - 내 gcd()는 항상 0을 반환합니다.
나는 gcd()
함수를 작성했지만 항상 0
을 반환합니다.
(define (gcd a b)
(cond (= b 0)
(a)
(else ((gcd b (modulo a b))))
)
)
왜 내가 잘못 되었나요?
저는 방금 오늘 스킴을 배우기 시작합니다.스킴 - 내 gcd()는 항상 0을 반환합니다.
나는 gcd()
함수를 작성했지만 항상 0
을 반환합니다.
(define (gcd a b)
(cond (= b 0)
(a)
(else ((gcd b (modulo a b))))
)
)
왜 내가 잘못 되었나요?
이 문제를 해결해야합니다
(define (gcd a b)
(cond [(= b 0) a]
[else (gcd b (modulo a b))]))
을 잘못 괄호 사이에 어떤 표현을 둘러싼하고, 일부 괄호가 cond
표현에서 누락되었다. 당신은 괄호 안에 뭔가를 서라운드 방식에서는, 당신은 통역을 이야기하고 (a)
말 것을
주의 사항 : a
이 인수를 갖는 프로 시저가 내가 그것을 호출 할,이 여기에이 아니었다, a
입니다 단지 숫자. 내 위의 코드와 같이
또한, 가독성을 위하여, 그것은하는 cond
표현에 조건을 각각 분리하는 대신 ()
의 []
를 사용하는 것이 좋은 생각 -하지만 그들을 잊지 마세요, 그들은 필수이고 귀하의 코드에서 첫 번째 조건에서 그들을 잊어 버렸습니다.
다른 사람들은 실수가 무엇이고 무엇을해야하는지 설명했습니다.
코드가 실제로 실행되는 방법과 사용자가 보는 출력을 생성하는 이유를 고려하는 것도 도움이됩니다. 누락 된 괄호 때문에 cond
의 첫 번째 사례는 (= b 0)
입니다. 첫 번째 것은 (=
) 조건으로 간주됩니다. #f
을 제외한 스키마의 모든 내용이 true이므로 항상 true입니다. 사실이므로이 경우 평가됩니다. 특히, 괄호 안의 나머지는 암시 적으로 begin
과 같이 평가할 (가능한 여러) 표현식으로 사용됩니다. 따라서 기본적으로 (begin b 0)
을 평가합니다. 결과는 마지막 표현 0
의 결과입니다.
괄호 문제. 좋은 IDE와 들여 쓰기를 사용하면 이런 종류의 문제를 피할 수 있습니다. 지금은 내 대답을보고 잘못된 점을 확인하십시오. –
gcd는 a> = b 인 경우에만 작동합니다. – carla