我想访问一个n维向量但不知何故(空?'())一直返回false。
;;访问n维向量
;; (access-nd vector a-list-of-numbers) - >元素
;; (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)))
答案 0 :(得分:2)
最有可能的是,一行应该是:
(vector-ref (apply access-nd avector (rest alist)) (first alist)))
如果没有“申请”,alist
将永远不会为空。原因如下:
在access-nd
的定义中,alist
参数是可选参数列表;它用正常位置参数的点分隔。这意味着可以使用1-n参数调用access-nd
。第一个之后的任何参数都被收集到列表并绑定到alist
。例如,像
(access-nd v 1 2 3)
会导致alist
绑定到列表(1 2 3)
。同样,您在原始代码中进行此调用:
(access-nd avector (rest alist))
将导致alist
绑定到包含一个元素的列表。这就是alist
永远不会为空的原因。
Scheme apply
将一个参数列表作为最后一个参数,并调用该函数,就像它们以正常方式传递给它一样。