From 890ad2bcee172ab2a4cbb319145f5b42ba38619a Mon Sep 17 00:00:00 2001 From: Julian T Date: Thu, 25 Nov 2021 08:47:19 +0100 Subject: Add notes and assignment solution --- sem7/pp/larger.hs | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 sem7/pp/larger.hs (limited to 'sem7/pp/larger.hs') diff --git a/sem7/pp/larger.hs b/sem7/pp/larger.hs new file mode 100644 index 0000000..5618faf --- /dev/null +++ b/sem7/pp/larger.hs @@ -0,0 +1,29 @@ +import Data.Maybe + +data LTree = LLeaf String | LNode LTree LTree +data LTreeRoot = LTreeRoot LTree Float + +treemerge :: LTreeRoot -> LTreeRoot -> LTreeRoot +treemerge (LTreeRoot ta la) (LTreeRoot tb lb) = LTreeRoot (LNode ta tb) (la + lb) + +data Bit = Zero | One + +instance Show Bit where + show Zero = "0" + show One = "1" + +createBitList :: String -> Maybe [Bit] +createBitList [] = Just [] +createBitList (c:rest) | c == '0' = createBitList rest >>= Just . (:) Zero + | c == '1' = createBitList rest >>= Just . (:) One + | otherwise = Nothing + +maketable :: LTree -> [([Bit], String)] +maketable = recur [] + where recur prefix (LLeaf val) = [(reverse prefix, val)] + recur prefix (LNode left right) = + recur (Zero : prefix) left ++ + recur (One : prefix) right + + +testTree = LNode (LLeaf "Hej") (LNode (LLeaf "Med") (LLeaf "Dig")) -- cgit v1.2.3