我想寫一個函數,檢查給定的輸入是否包含數字以外的任何字符。但是,我在DrRacket的計劃下獲得contract violation
。迭代計劃向量的元素導致違反合同
下面的代碼:
的方法,其分離的字符串變換成字符:
(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?'! :) – 2012-12-09 15:51:42
@ÓscarLópez:如果我運行'(定義myNumber(打破「dsdsadsa」))'然後我得到'char-numeric ?:違反合同 預期:char? 給出:1' – ron
@ÓscarLópez:好的,你贏了:)你的建議很好! +1和選擇! – ron