题
我想访问n维矢量,但某种程度上(空?'())不断返回false。
;访问n维矢量
; (访问-nd vector a-list in-umbers) - >元素
; (access -nd(vector(vector'x'y)'a'b))0 1) - > x
(define (access-nd avector . alist)
(cond
((and (not(empty? alist)) (vector? avector))
(vector-ref (access-nd avector (rest alist)) (first alist)))
(else avector)))
请帮忙。
编辑:更正的代码
(define (access-nd avector . alist)
(cond
((and (not(empty? alist)) (vector? avector))
(apply access-nd (vector-ref avector (first alist)) (rest alist)))
(else avector)))
解决方案
最有可能的一行应该读:
(vector-ref (apply access-nd avector (rest alist)) (first alist)))
没有“应用”, alist
永远不会空的。为什么:
在定义中 access-nd
这 alist
参数是可选参数列表;它用一个点与正常位置参数分开。这表示 access-nd
可以使用1-N参数调用。第一个参数收集到列表并绑定到 alist
. 。例如,一个电话像
(access-nd v 1 2 3)
将造成 alist
被绑定到列表 (1 2 3)
. 。同样,此呼叫在您的原始代码中:
(access-nd avector (rest alist))
将造成 alist
绑定到一个元素的列表。这就是为什么 alist
永远不会空的。
方案 apply
, 另一方面,将参数列表作为最后一个参数列表,并将函数称为以正常方式传递给它的函数。
不隶属于 StackOverflow