주어진 입력에 숫자 이외의 문자가 들어 있는지 확인하는 함수를 작성하려고합니다. 그러나 Scheme의 DrRacket에 contract violation
이 있습니다. 여기 Scheme-vector 요소를 반복하면 계약 위반이 발생합니다.
방법이 문자로 문자열 분리 :
(define (breaking str) (list->vector (string->list str)))
수에 대한 벡터 만들기 : 여기
(define myNumber (breaking "123498765"))
내가 주어진 번호를 확인 :
를(define (vectorFunc myVector)
(define i 0)
(do()
((= i (vector-length myVector))) ; run until the end of the vector
(cond ((< (vector-ref myVector i) #\0) 'incorrect)
((> (vector-ref myVector i) #\9) 'also-incorrect))
(set! i (+ i 1)) ; inc "i+ by 1
); end of do
)
그리고
(vectorFunc myNumber)
의 출력은
:
. . >: contract violation
expected: real?
given: #\1
argument position: 1st
other arguments...:
#\0
>
그 문제점은 무엇입니까?
'char-numeric?'에 대한 힌트를 주셔서 감사합니다! :) –
@ Óscar López :'(myNumber (breaking "dsdsadsa"))'를 실행하면 'char-numeric?'이 표시됩니다. 계약 위반 expected : char? given : 1' – ron
@ Óscar López : 알았어요. :) 당신의 제안은 훌륭합니다! +1하고 선택한! – ron