Vector 方案中的向量

Vector 方案中的向量,vector,scheme,Vector,Scheme,如果不使用内置的(vector->list)函数,我将如何编写一个vector to list函数。具体来说,我希望学习如何访问向量中的值,因为我以前没有使用过它们 是否有比此更直接的实现: (define (vector-to-list vec) (define (helper k lst) (if (= k (vector-length vec)) lst (helper (+ k 1) (cons (vector-ref vec k) lst))))

如果不使用内置的(vector->list)函数,我将如何编写一个vector to list函数。具体来说,我希望学习如何访问向量中的值,因为我以前没有使用过它们

是否有比此更直接的实现:

(define (vector-to-list vec)
 (define (helper k lst)
   (if (= k (vector-length vec))
        lst
       (helper (+ k 1) (cons (vector-ref vec k) lst))))
  (reverse (helper 0 '())))
 (vector-to-list #(1 2 3 4))

不,这是一个很好的实现。我们可以更习惯地使用“named let”来编写它:

(define (vector-to-list vec)
  (let ((len (vector-length vec)))
    (let looping ((k 0) (lst '())
      (if (= k len)
          (reverse lst)
          (looping (+ k 1)
                   (cons (vector-ref vec k) lst)))))
通过从后向前构建列表,可以避免使用
reverse

(define (vector-to-list vec)
  (let looping ((k (- (vector-length vec) 1)) (lst '())
    (if (< k 0)
        lst
        (looping (- k 1)
                 (cons (vector-ref vec k) lst)))))
(定义(向量到列表向量)
(let循环((k(-(向量长度vec)1))(lst’())
(如果(
不,这是一个很好的实现。可以使用“命名let”更习惯地编写它,如:

(define (vector-to-list vec)
  (let ((len (vector-length vec)))
    (let looping ((k 0) (lst '())
      (if (= k len)
          (reverse lst)
          (looping (+ k 1)
                   (cons (vector-ref vec k) lst)))))
通过从后向前构建列表,可以避免使用
reverse

(define (vector-to-list vec)
  (let looping ((k (- (vector-length vec) 1)) (lst '())
    (if (< k 0)
        lst
        (looping (- k 1)
                 (cons (vector-ref vec k) lst)))))
(定义(向量到列表向量)
(let循环((k(-(向量长度vec)1))(lst’())
(如果(