Skip to content

Instantly share code, notes, and snippets.

@thomasdziedzic
Created October 12, 2015 07:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save thomasdziedzic/c1e5d49f0c2510dd17f6 to your computer and use it in GitHub Desktop.
Save thomasdziedzic/c1e5d49f0c2510dd17f6 to your computer and use it in GitHub Desktop.
import Data.Vect
create_empties : Vect n (Vect 0 elem)
create_empties = replicate _ []
transpose_mat : Vect m (Vect n elem) -> Vect n (Vect m elem)
transpose_mat [] = create_empties
transpose_mat (x :: xs) = let xs_trans = transpose_mat xs in
zipWith (::) x xs_trans
addMatrix : Num elem => Vect m (Vect n elem) -> Vect m (Vect n elem) -> Vect m (Vect n elem)
addMatrix [] [] = []
addMatrix (x :: xs) (y :: ys) = zipWith (+) x y :: addMatrix xs ys
dotProduct : Num a => Vect m a -> Vect m a -> a
dotProduct xs ys = sum (zipWith (*) xs ys)
multMatrixHelper2 : Num elem => (x : Vect m elem) -> (ys : Vect p (Vect m elem)) -> Vect p elem
multMatrixHelper2 x [] = []
multMatrixHelper2 x (y :: ys) = dotProduct x y :: multMatrixHelper2 x ys
multMatrixHelper : Num elem => (xs : Vect n (Vect m elem)) -> (ys_trans : Vect p (Vect m elem)) -> Vect n (Vect p elem)
multMatrixHelper xs [] = replicate _ []
multMatrixHelper [] ys = []
multMatrixHelper (x :: xs) ys = multMatrixHelper2 x ys :: multMatrixHelper xs ys
multMatrix : Num elem => Vect n (Vect m elem) -> Vect m (Vect p elem) -> Vect n (Vect p elem)
multMatrix xs ys = let ys_trans = transpose_mat ys in multMatrixHelper xs ys_trans
create_empties2 : Vect n (Vect 0 a)
create_empties2 {n = Z} = []
create_empties2 {n = (S k)} = [] :: create_empties2
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment