Package arithmetic %% This package provides functions for incrementing, %% adding and multiplying binary numbers, represented as lists. %% %% In all cases, lists begin with the low order end of the number. %% For example, list [1,1,0,0,1] stands for the binary number %% 10011, or 19 in decimal. %% A list is normalized if it does not end on 0. All of the %% following functions produce normalized results, even if the %% parameter(s) are not normalized. ================================================================ export ================================================================ Abbrev Bit = Natural. Expect inc : [Bit] -> [Bit] %" inc(x) is x+1, where both x and the result are binary %" numbers represented as lists. %" For example inc([1,0,1,1]) = [0,1,1,1] ; sum : ([Bit], [Bit]) -> [Bit] %" sum(x,y) = x + y, where x, y and the result are %" binary numbers represented as lists. For example, %" sum([0,1,1], [1,1,1]) = [1,0,1,1]. (6 + 7 = 13) ; product : ([Bit], [Bit]) -> [Bit] %" product(x,y) = x * y, where x, y and the result are %" binary numbers represented as lists. For example, %" product([1,1], [1,1]) = [1,0,0,1]. (3*3 = 9) ; %Expect ================================================================ implementation ================================================================ Import "collect/listfun". %% Provides removeTrailing. Define normalize = removeTrailing 0. =============================================================== %% inc =============================================================== %% inc_a is similar to inc, but does not normalize its result. Define Example inc_a [1,1,0,1,1] = [0,0,1,1,1]. Example inc_a [1] = [0,1]. case inc_a [] = [1] case inc_a (0::?t) = 1::t case inc_a (1::?t) = 0::inc t %Define Define Example inc [1,1,0,1,1,0,0] = [0,0,1,1,1]. Example inc [1] = [0,1]. inc ?x = normalize(inc_a x) %Define %% ***** Write your function definitions in this part, and remove this comment. %Package