문제

나는 학습 계획의 과정에 있습니다. 나는 최근에 Cond 조항에서 'else'단어를 놓치고 있다는 것을 깨달기 전에 프로그램에서 버그를 찾는 데 시간을 보냈습니다. 그러나 그러한 상황에서의 행동은 조금 이상해 보입니다. 간단한 프로그램 (아래)만으로 조건을 실험하면 (아래) '뭐든지'는 else 절에 예상대로 표시되지만 표시되지만 'else'가 없으면 주변의 이중 인용문과 인터넷이 해석되지 않은 새로 표시됩니다. 문자 그대로 인쇄되었습니다. 아무도 나에게 무슨 일이 일어나고 있는지 설명 할 수 있습니까? 티아.

   (define (foo x)
    (cond ((eq? x 0) (display "zero\n"))
          (display "whatever\n")))

   (define (bar x)
    (cond ((eq? x 0 ) (display "zero\n"))
          (else (display "whatever\n"))))

In the repl window:
Welcome to DrScheme, version 4.1.5 [3m].
Language: Pretty Big; memory limit: 128 megabytes.
> (foo 0)
zero
> (bar 0)
zero
> (foo 2)
"whatever\n"
> (bar 2)
whatever
> 
도움이 되었습니까?

해결책

"else"는 "True"의 동의어 일뿐입니다. COND를 읽는 방법은 일련의 테스트로서 첫 번째 테스트가 그 형태를 평가 해야하는 원인입니다.

(cond  ( (test) (do this) )
       ( (test) (do this) ) )

여기 첫 번째 것이 있습니다

 (cond ((eq? x 0) (display "zero\n"))
        (display "whatever\n")))

Cond를 봅니다 (eq? x 0) 그리고 그것은 거짓이라고 결정했습니다. 다음 조항은입니다 (display "whatever\n"). 보고 본다 display, 이후 display 아니다 nil, 그것은 사실입니다. 그런 다음 문자열을 평가합니다 "whatever\n", 단순히 그 자체로 평가됩니다. 그러므로 콘의 가치는입니다 "whatever\n".

자, 여기에 두 번째가 있습니다.

(cond ((eq? x 0 ) (display "zero\n"))
       (else (display "whatever\n"))))

여기서 첫 번째 테스트는 거짓이며 두 번째 테스트로 진행됩니다. else 그리고 True로 평가합니다. (당신이 그것에 대해 생각한다면, 그것은 "다른 테스트가 사실이 아닌 모든 경우에" "else"가 정상적인 if-then-else에서 의미하는 바입니다.)

이제 다음 양식은 다음과 같습니다 (display "whatever\n"). 그것은 문자열 인수를 콘솔로 보내고 디스플레이가하는 일이기 때문에 아무것도 반환하지 않는 함수입니다. 다른 계획에서는 문자열 값을 반환하고 인쇄 할 수 있습니다.

whatever
"whatever\n"

다른 팁

에서 foo 기능, cond 진술은 평가합니다 display 테스트 조건으로. 실제로 부르는 기호가 있기 때문입니다 display, 그것은 true로 평가됩니다 "whatever\n" 그런 다음 결과로 평가됩니다 (foo 2).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top