我有一个大小为700000的向量,其中包含全零。我试图将索引中的值更改为1.我通过计算得到索引。这是代码:
#lang racket
; Make bitvector
(define bitvector (make-vector 700000 0))
; Fill indices
(define fillvector
(lambda (hashlist dict)
(cond [(null? hashlist) (cdr dict)]
[(null? dict) '()]
[else (vector-set! bitvector ((car hashlist) (car dict)) 1) (fillvector (cdr hashlist) dict)]
)
))
我这样打fillvector
:(fillvector hashfl-1 dictionary)
。 dictionary
是一堆词:
(define dictionary '( (h e l l o)
(w a y)
(r a i n b o w) ))
运行该命令后出现此错误:
vector-set!: contract violation
expected: exact-nonnegative-integer?
given: 415458.0
argument position: 2nd
other arguments...:
'#(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0...
1
我认为错误是因为乘法方法可以返回一个十进制值(尽管我确定它总是为.0)。还有什么我可以做的吗?任何帮助将不胜感激,谢谢!
答案 0 :(得分:2)
将浮点(“不精确”)数转换为非浮点(“精确”)数的过程为inexact->exact
(或R6RS和R7RS中的exact
。< / p>
> (inexact->exact 415458.0)
415458