Scheme中的向量

Posted

技术标签:

【中文标题】Scheme中的向量【英文标题】:Vectors in Scheme 【发布时间】:2013-12-21 02:16:58 【问题描述】:

如何在不使用内置 (vector->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】:

不,这是一个合理的实现。可以使用 '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)))))

【讨论】:

以上是关于Scheme中的向量的主要内容,如果未能解决你的问题,请参考以下文章

openGL中的法向量问题

使用嵌套在向量中的向量转储的分段故障核心

关于C++中的二维向量

Rcpp中的布尔向量子集向量

python中的一维数组行向量与列向量

如何检查向量的所有元素是不是在 Eigen c++ 中的另一个向量中?