我想访问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-ndalist 参数是可选参数列表;它用一个点与正常位置参数分开。这表示 access-nd 可以使用1-N参数调用。第一个参数收集到列表并绑定到 alist. 。例如,一个电话像

(access-nd v 1 2 3) 

将造成 alist 被绑定到列表 (1 2 3). 。同样,此呼叫在您的原始代码中:

(access-nd avector (rest alist))

将造成 alist 绑定到一个元素的列表。这就是为什么 alist 永远不会空的。

方案 apply, 另一方面,将参数列表作为最后一个参数列表,并将函数称为以正常方式传递给它的函数。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top