0

我想访问一个 n 维向量,但不知何故(空?'())一直返回 false。

;; 访问 n 维向量
;;(access-nd vector a-list-of-numbers) -> element
;; (访问-nd(向量(向量'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)))
4

1 回答 1

2

最有可能的是,这一行应该是:

     (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另一方面,Scheme将参数列表作为最后一个参数并调用函数,就好像它们以正常方式传递给它一样。

于 2009-06-10T18:02:49.307 回答