矢量的点积

时间:2014-05-07 22:48:04

标签: 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))

所以基本上我正在尝试构建一个满足这两个检查期望的函数(点)。

到目前为止,我只是通过定义函数

来启动它
(define (dot vec1 vec2)

我以前定义了一个与foldl相同的函数(vfold),除了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)))

1 个答案:

答案 0 :(得分:2)

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

(define (dot a b)
    (apply + (vector->list (vector-map * a b)))
)