这个过程应该根据给定的过程替换 vec1 中的值。因此,如果过程是+
,那么它将 vec1 中的每个值替换为每个元素的总和。例如:
~ (define v (vector 1 2 3 4 5 6))
~ (vector-join v + v)
~ v
#(2 4 6 8 10 12)
我知道递归存在问题,但我不知道如何解决它。我只学会了如何使用 cons 进行递归,我认为这在这类问题中不是正确的做法。
到目前为止,这是我的代码:
(define v (vector 1 2 3 4 5 6))
(define (vector-join vec1 pre vec2)
(define (help v1 proc v2 i)
(if (null? v1) v1
(if (null? v2) v1
(if (>= i (vector-length v1)) v1
(cons (vector-set! v1 i (proc (vector-ref v1 i) (vector-ref v2 i)))
(help v1 proc v2 (add1 i)))))))
(help vec1 pre vec2 0))
当我输入这个:
(vector-join v + v)
它返回这个:
(#<void> #<void> #<void> #<void> #<void> #<void> . #(2 4 6 8 10 12))
最后一部分是正确的答案,但我不知道为什么#voids
会出现。有什么帮助吗?