Linear Algebra (5)
冷静に
てか記述がダウトじゃん。なんか適当に手を動かしてたら試験にパス。一応試験を再度以下に。
(test-section "Fij-lambda") (test* "(F-i-j-lambda 1 2 -3 '((1 0) (0 1)))" '((1 -3) (0 1)) (F-i-j-lambda 1 2 -3 '((1 0) (0 1)))) (test* "(F-i-j-lambda 2 1 -3 '((1 0) (0 1)))" '((1 0) (-3 1)) (F-i-j-lambda 2 1 -3 '((1 0) (0 1)))) (test* "(F-i-j-lambda 1 2 1/2 '((1 0 0) (0 1 0) (0 0 1)))" '((1 1/2 0) (0 1 0) (0 0 1)) (F-i-j-lambda 1 2 1/2 '((1 0 0) (0 1 0) (0 0 1)))) (test* "(F-i-j-lambda 2 1 1/2 '((1 0 0) (0 1 0) (0 0 1)))" '((1 0 0) (1/2 1 0) (0 0 1)) (F-i-j-lambda 2 1 1/2 '((1 0 0) (0 1 0) (0 0 1))))
で、パスしてるのが以下な手続き。
(define (F-i-j-lambda i j n l) (let f ((row (v-+-v (scalar-*-v n (getRow j l)) (getRow i l))) (now 1) (l l)) (if (null? l) '() (cons (if (= now i) row (car l)) (f row (+ now 1) (cdr l))))))
ハマッてたダウトな実装が以下。
(define (F-i-j-lambda i j n l) (let f ((row (v-+-v (scalar-*-v n (getRow (if (< i j) j i) l)) (getRow (if (< i j) i j) l))) (now 1) (l l)) (if (null? l) '() (cons (if (= now (if (< i j) i j)) row (car l)) (f row (+ now 1) (cdr l))))))
テキストがダウトな気がするのは気のせいなのだろうか。