在Racket中预期的数字时使用literal

时间:2014-02-02 20:45:16

标签: list integer racket literals illegalargumentexception

我正在尝试使用它:

(vector-set! (vector-ref array (car xy)) (cdr xy) step_count)

其中xy是像'(0 0)作为参数传入的列表。

但是我收到了这个错误:

vector-set!: contract violation
  expected: exact-nonnegative-integer?
  given: '(0)
  argument position: 2nd
  other arguments...:
   '#(0 0 0 0 0)
   1

(cdr xy)存在问题,我想我需要将'(0)变为0,但我无法在Racket中找到可以做到这一点的机制。

我知道这样的一句话:

(vector-set! (vector-ref array (sub1 (car xy))) (sub1 (cdr xy)) (read))
使用以下内容形成xy时,

有效:

(define xy (cons (read) (read)))

有人能指出我正确的方向吗?

感谢阅读。

1 个答案:

答案 0 :(得分:1)

cdr上使用list时,表示“列表的其余部分”。列表的其余部分始终是list不是列表中的单个元素。

如果您想要列表xy的第二个元素,则需要使用cadr

(您也可以使用second。)

(define xy (list 1 2 3))
(cdr xy)    ; '(2 3)
(cadr xy)   ;   2
(second xy) ;   2