我正在尝试使用它:
(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)))
有人能指出我正确的方向吗?
感谢阅读。
答案 0 :(得分:1)
在cdr
上使用list
时,表示“列表的其余部分”。列表的其余部分始终是list
,不是列表中的单个元素。
如果您想要列表xy
的第二个元素,则需要使用cadr
。
(您也可以使用second
。)
(define xy (list 1 2 3))
(cdr xy) ; '(2 3)
(cadr xy) ; 2
(second xy) ; 2