From 2123b282bc0603fc552620a32ae6aee9276aed71 Mon Sep 17 00:00:00 2001 From: Ivaylo Ivanov Date: Thu, 4 Nov 2021 20:17:26 +0100 Subject: [PATCH] Add sign function to UE3 A.4 --- code/Angabe3.lhs | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/code/Angabe3.lhs b/code/Angabe3.lhs index 6f8e88d..4ef6da0 100644 --- a/code/Angabe3.lhs +++ b/code/Angabe3.lhs @@ -83,6 +83,8 @@ Solution: Aufgabe A.4 +Implement each of the num functions for the matrices + > instance Num Matrix where > (+) m1 m2 = (add m1 m2) > (-) m1 m2 = (diff m1 m2) @@ -122,14 +124,23 @@ Aufgabe A.4 > sign :: Matrix -> Matrix > sign (M m1) > | matrixtyp (M m1) == KeineMatrix = error "Vorzeichenfunktion undefiniert" -> | [True] `elem` negative && [False] `elem` negative = error "Vorzeichenfunktion undefiniert" -> | [True] `elem` positive && [False] `elem` positive = error "Vorzeichenfunktion undefiniert" -> | [True] `elem` nulls && [False] `elem` nulls = error "Vorzeichenfunktion undefiniert" -> | [True] `elem` nulls = M([[0]]) -> | [True] `elem` positive = M([[1]]) -> | [True] `elem` negative = M([[-1]]) +> | True `elem` negative = +> if False `elem` negative then error "Vorzeichenfunktion undefiniert" +> else M([[-1]]) +> | True `elem` positive = +> if False `elem` positive then error "Vorzeichenfunktion undefiniert" +> else M([[1]]) +> | True `elem` nulls = +> if False `elem` nulls then error "Vorzeichenfunktion undefiniert" +> else M([[0]]) > | otherwise = error "Vorzeichenfunktion undefiniert" > where -> negative = map (map (<0)) m1 -> nulls = map (map (==0)) m1 -> positive = map (map (>0)) m1 +> negative = boolMatrixToList (map (map (<0)) m1) [] +> nulls = boolMatrixToList (map (map (==0)) m1) [] +> positive = boolMatrixToList (map (map (>0)) m1) [] + +> boolMatrixToList :: [[Bool]] -> [Bool] -> [Bool] +> boolMatrixToList (m:ms) res +> | null m = res +> | length m /= 0 && null ms = res ++ m +> | otherwise = boolMatrixToList ms (res ++ m)