1

2 つのベクトルのドット積を取得する方法を考えていました。

(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))

したがって、基本的には、これら 2 つのチェックの期待を満たす関数 (ドット) を作成しようとしています。

これまでのところ、関数を定義することによってこれを開始しただけです

(define (dot vec1 vec2)

vfoldl がリストではなくベクトルで機能することを除いて、foldl と同じ関数 (vfold) を以前に定義しましたが、この新しい関数にそれを使用する必要があるかどうかはわかりません。

; 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)))
4

1 に答える 1

2

以下はうまくいきませんか?(私はそれをテストするための通訳を手元に持っていません。チェックするために少し待ってください。)

(define (dot a b)
    (apply + (vector->list (vector-map * a b)))
)
于 2014-05-07T23:25:03.763 に答える