Vector 向量的点积

Vector 向量的点积,vector,scheme,racket,dot-product,Vector,Scheme,Racket,Dot Product,我想知道如何得到两个向量的点积 (check-expect (dot (vector 5 1 1) (vector 1 0 0)) (+ 5 0 0)) (check-expect (dot (vector 1 1 5) (vector 1 0 0)) (+ 1 0 0)) 所以本质上我正在尝试构建一个函数(dot),它将满足这两个检查期望 到目前为止,我只是从定义函数开始 (define (dot vec1 vec2) 我之前定义了一个函数(vfold),它与foldl相同,只是vfold

我想知道如何得到两个向量的点积

(check-expect (dot (vector 5 1 1) (vector 1 0 0)) (+ 5 0 0))
(check-expect (dot (vector 1 1 5) (vector 1 0 0)) (+ 1 0 0))
所以本质上我正在尝试构建一个函数(dot),它将满足这两个检查期望

到目前为止,我只是从定义函数开始

(define (dot vec1 vec2)
我之前定义了一个函数(vfold),它与foldl相同,只是vfoldl作用于向量而不是列表,但我不确定是否必须将它用于这个新函数

; vfoldl: (X Y --> Y) Y [VectorOf X] --> Y
(define (vfoldl combine base avec)
  (local [(define imax (sub1 (vector-length avec)))
          (define (vaux combine avec index acc)
            (cond [(= index imax) (combine (vector-ref avec imax) acc)]
                  [else (vaux combine
                              avec
                              (add1 index)
                              (combine (vector-ref avec index)
                                       acc))]))]
   (vaux combine avec 0 base)))

下面的工作不应该吗?(我手边没有翻译来测试,给我一分钟时间检查一下。)


请发布一个工作过程,说明您迄今为止实现了什么。它不起作用(为什么是
方块
?),但类似的东西会:
(apply+(vector->list(vector map*v1 v2))
@scarLópez我不知道为什么会出现这种情况,我复制了一段代码,但我认为我已经删除了它。不知道为什么它会突然出现。它现在已经修复了,这才是最重要的:)+1@ÓscarLópez是什么让你的版本比这个更好,它更快吗?我对球拍不太了解,这只是我觉得很优雅的方式。我的只是。。。不一样。我喜欢你的,它又短又地道。我喜欢我的(这可能与OP的意图一致)是它直接使用向量解决问题,而无需将输入转换为列表。
(define (dot a b)
    (apply + (vector->list (vector-map * a b)))
)