如何在不使用内置(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))
答案 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)))))