equal
deleted
inserted
replaced
16 For instance, ~5 div 2 = ~3 and ~5 mod 2 = 1; thus ~5 = (~3)*2 + 1 |
16 For instance, ~5 div 2 = ~3 and ~5 mod 2 = 1; thus ~5 = (~3)*2 + 1 |
17 |
17 |
18 Division is not defined yet! |
18 Division is not defined yet! |
19 *) |
19 *) |
20 |
20 |
21 Bin = Integ + Datatype + |
21 Bin = Int + Datatype + |
22 |
22 |
23 consts |
23 consts |
24 bin_rec :: [i, i, i, [i,i,i]=>i] => i |
24 bin_rec :: [i, i, i, [i,i,i]=>i] => i |
25 integ_of :: i=>i |
25 integ_of :: i=>i |
26 NCons :: [i,i]=>i |
26 NCons :: [i,i]=>i |
141 fun bin_of (Const ("Pls", _)) = [] |
141 fun bin_of (Const ("Pls", _)) = [] |
142 | bin_of (Const ("Min", _)) = [~1] |
142 | bin_of (Const ("Min", _)) = [~1] |
143 | bin_of (Const ("Cons", _) $ bs $ b) = dest_bit b :: bin_of bs |
143 | bin_of (Const ("Cons", _) $ bs $ b) = dest_bit b :: bin_of bs |
144 | bin_of _ = raise Match; |
144 | bin_of _ = raise Match; |
145 |
145 |
146 fun int_of [] = 0 |
146 fun integ_of [] = 0 |
147 | int_of (b :: bs) = b + 2 * int_of bs; |
147 | integ_of (b :: bs) = b + 2 * integ_of bs; |
148 |
148 |
149 val rev_digs = bin_of tm; |
149 val rev_digs = bin_of tm; |
150 val (sign, zs) = |
150 val (sign, zs) = |
151 (case rev rev_digs of |
151 (case rev rev_digs of |
152 ~1 :: bs => ("-", prefix_len (equal 1) bs) |
152 ~1 :: bs => ("-", prefix_len (equal 1) bs) |
153 | bs => ("", prefix_len (equal 0) bs)); |
153 | bs => ("", prefix_len (equal 0) bs)); |
154 val num = string_of_int (abs (int_of rev_digs)); |
154 val num = string_of_int (abs (integ_of rev_digs)); |
155 in |
155 in |
156 "#" ^ sign ^ implode (replicate zs "0") ^ num |
156 "#" ^ sign ^ implode (replicate zs "0") ^ num |
157 end; |
157 end; |
158 |
158 |
159 |
159 |