(方案)从一个数字中取小数(即42.0 - > 42)

时间:2015-11-26 03:44:28

标签: vector scheme decimal racket

我有一个大小为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)。还有什么我可以做的吗?任何帮助将不胜感激,谢谢!

1 个答案:

答案 0 :(得分:2)

将浮点(“不精确”)数转换为非浮点(“精确”)数的过程为inexact->exact(或R6RS和R7RS中的exact。< / p>

> (inexact->exact 415458.0)
415458