1. Dla wektorĂłw napisz: a) my_vect_map : (a -> b) -> Vect n a -> Vect n b b) insert, ktĂłry wsortowuje element x do posortowanej listy insert : Ord el => (x : el) -> (xsSorted : Vect k el) -> Vect (S k) el c) insertion sort, uĹźywajÄ c insert z poprzedniego podpunktu insSort : Ord el => Vect n el -> Vect n el pamiÄtaj o import Data.Vect 2. ZaĹóşmy, Ĺźe typ macierzy nxm (n wierszy m kolumn) o wartoĹciach w typie el reprezentowany jest przez Vect n (Vect m el). UĹźywajÄ c: create_empties : {n : Nat} -> Vect n (Vect 0 el) create_empties {n = Z} = [] create_empties {n = (S k)} = [] :: create_empties Napisz funkcje: a) transpose_mat : {n : Nat} -> Vect m (Vect n el) -> Vect n (Vect m el) zamieniajÄ cÄ macierz 1 2 3 4 5 6 na 1 4 2 5 3 6 b) addMatrix : Num el => Vect n (Vect m el) -> Vect n (Vect m el) -> Vect n (Vect m el) c) multMatrix : Num el => {p: Nat} -> Vect m (Vect n el) -> Vect n (Vect p el) -> Vect m (Vect p el) WskazĂłwka do c) zacznij od transpose_mat prawej macierzy 3. Obejrzyj typ Fin i funkcje integerToFin i index (:module Data.Vect, :doc Fin, :t integerToFin, :t index) sprawdĹş wartoĹci: integerToFin 0 4 integerToFin 1 4 integerToFin 2 4 integerToFin 3 4 integerToFin 4 4 Napisz funkcje: a) tryIndex : {n: _} -> Integer -> Vect n a -> Maybe a b) vectTake - odpowiednik take dla list, biorÄ cy pod uwagÄ dĹugoĹci wektorĂłw c) sumEntriesAt : Num a => {n: _} -> (pos : Integer) -> Vect n a -> Vect n a -> Maybe a sumujÄ ca wartoĹci z dwĂłch wektorĂłw pod indeksami pos 4. Obejrzyj plik Printf.idr i rozszerz o formaty dla Char i Double 5. Zdefiniuj funkcjÄ TupleVect : Nat -> Type -> Type, budujÄ cÄ typ wektorĂłw o danej dĹugoĹci, uĹźywajÄ c zagnieĹźdĹźonych krotek: (TupleVect 0 ty) to ma byÄ typ () (TupleVect 1 ty) to ma byÄ typ (ty, ()) (TupleVect 2 ty) to ma byc typ (ty, (ty, ())) .... Czyli zdefiniuj funkcjÄ obliczajÄ cÄ typy TupleVect: Nat -> Type -> Type , tak Ĺźeby: test : TupleVect 4 Nat test = (1,2,3,4,()) Napisz appendTV dla takich wektorĂłw.