use context essentials2021 # CMPU 101, Section 53 # 13 February 2023 #################### # # Data definitions # #################### # single constructor data Time: | time(hours :: Number, mins :: Number) end # Data with varieties data Day: | sunday | monday | tuesday | wednesday | thursday | friday | saturday end # varieties and separate constructors data Message: | direct(sender :: String, recipient :: String, message :: String) | group(sender :: String, recipients :: List, message :: String) end # mixed: varieties and constructors data Name: | name(first :: String, last :: String) | anonymous end ################################ # # Recursive data definition: # (how List is really defined) # ################################ #| data List: | empty | link(first :: Any, rest :: List) end |# ########################### # # Recursive list function # ########################### fun my-sum(lst :: List) -> Number: doc: "Return the sum of the numbers in the list" cases (List) lst: | empty => 0 | link(f, r) => f + my-sum(r) end where: my-sum([list: ]) is 0 my-sum([list: 4]) is 4 + my-sum([list: ]) my-sum([list: 1, 4]) is 1 + my-sum([list: 4]) my-sum([list: 3, 1, 4]) is 3 + my-sum([list: 1, 4]) end