Scheme中的向量

时间:2013-12-04 14:30:38

标签: 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))))
  (reverse (helper 0 '())))
 (vector-to-list #(1 2 3 4))

1 个答案:

答案 0 :(得分: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)))))