Vector 方案中的向量
如果不使用内置的(vector->list)函数,我将如何编写一个vector to list函数。具体来说,我希望学习如何访问向量中的值,因为我以前没有使用过它们 是否有比此更直接的实现: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))))
(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’())
(如果(