음 .. 자신의 텍스트 is-sculpture
에 따르면 #t
또는 #f
을 반환하는 함수입니다. =
는 숫자 인수를 취하는 함수이다, 따라서이 호출은 잘못한다 : 이제
(= (is-sculpture? (right-mobile mobile)) #t) ; #t is not a number
당신이
#t
때마다 같은 객체입니다 (동일한 개체에 대한
eq?
를 사용할 수있는 또 다른에 대해 하나 개의 값을 확인, 문자 너무), 기본 유형은
eqv?
입니다.
(eq? 5 5) ; ==> #f
(eqv? 5 5) ; ==> #t
입니다.
equal?
은 또한 모든 프리미티브가
eqv?
인 동일한 유형의 시퀀스를 포함합니다. 예.
(eqv? (list 1 2 3) (list 1 2 3)) ; ==> #f
인 반면
(equal? (list 1 2 3) (list 1 2 3)) ; ==> #t
.
#t
또는 #f
을 반환하는 경우 (is-sculpture? ...)
과 같으므로 (eq? (is-sculpture? ...) #t)
은 필요하지 않습니다. oposite를 확인하려면 결과를 not
으로 감싸므로 (not (is-sculpture? ...))
이으로 표시됩니다.
cond
의 두 번째 용어에서 (is-sculpture? mobile)
은 사실이 아니므로 다음 행에서만 거짓 일 때 거짓인지 확인하는 이유는 무엇입니까? cond
에있는 모든 용어는 동일한 cond
의 이전 용어가 모두 거짓 일 것으로 기대할 수 있습니다.
우리는 코드를 실제로 눈으로 분석하지 않으므로 식별자가 얼마나 많은 괄호가 있는지 알려주고 괄호의 양은 많지 않습니다. 따라서 형식이 잘못 지정된 lisp 코드는 읽을 수 없습니다. 라켓에
당신은 내가 그것을 코드를 reident합니다
CTRL +
를 눌러야합니다. 당신은 필사적으로 그것을 필요로합니다. 또한 이전 줄 끝에 모든 끝 괄호를 넣으십시오. Heres는 I를 포맷 할 방법 : (define (weights# mobile)
(cond ((is-sculpture? mobile)
1)
; (is-sculpture? mobile) is #f
((and (is-sculpture? (right-mobile mobile))
(is-sculpture? (left-mobile mobile)))
3)
; At least one of the other is-sculpture? expressions are false.
(else
(+ 1 ; 3 + x-1 + y-2 == 1+x+y
(weights# (right-mobile mobile))
(weights# (left-mobile mobile))))))
reduncant있는 모든 =
테스트를 removnig 게다가 나는 로직을 변경하지 않은 내가 무엇을 인수이 다른 기능이 없거나 이후 테스트 방법이 없습니다 걸립니다.