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中的向量的主要内容,如果未能解决你的问题,请参考以下文章