comparison src/prim.sml @ 821:395a5d450cc0

Chars and more string operations
author Adam Chlipala <adamc@hcoop.net>
date Tue, 26 May 2009 12:25:06 -0400
parents 66463006f893
children 280f81731426
comparison
equal deleted inserted replaced
820:91f465ded07e 821:395a5d450cc0
29 29
30 datatype t = 30 datatype t =
31 Int of Int64.int 31 Int of Int64.int
32 | Float of Real64.real 32 | Float of Real64.real
33 | String of string 33 | String of string
34 | Char of char
34 35
35 open Print.PD 36 open Print.PD
36 open Print 37 open Print
37 38
38 fun p_t t = 39 fun p_t t =
39 case t of 40 case t of
40 Int n => string (Int64.toString n) 41 Int n => string (Int64.toString n)
41 | Float n => string (Real64.toString n) 42 | Float n => string (Real64.toString n)
42 | String s => box [string "\"", string (String.toString s), string "\""] 43 | String s => box [string "\"", string (String.toString s), string "\""]
44 | Char ch => box [string "#\"", string (String.str ch), string "\""]
43 45
44 fun int2s n = 46 fun int2s n =
45 if Int64.compare (n, Int64.fromInt 0) = LESS then 47 if Int64.compare (n, Int64.fromInt 0) = LESS then
46 "-" ^ Int64.toString (Int64.~ n) ^ "LL" 48 "-" ^ Int64.toString (Int64.~ n) ^ "LL"
47 else 49 else
62 fun toString t = 64 fun toString t =
63 case t of 65 case t of
64 Int n => int2s' n 66 Int n => int2s' n
65 | Float n => float2s n 67 | Float n => float2s n
66 | String s => s 68 | String s => s
69 | Char ch => str ch
67 70
68 fun p_t_GCC t = 71 fun p_t_GCC t =
69 case t of 72 case t of
70 Int n => string (int2s n) 73 Int n => string (int2s n)
71 | Float n => string (float2s n) 74 | Float n => string (float2s n)
72 | String s => box [string "\"", string (String.toString s), string "\""] 75 | String s => box [string "\"", string (String.toString s), string "\""]
76 | Char ch => box [string "'", string (str ch), string "'"]
73 77
74 fun equal x = 78 fun equal x =
75 case x of 79 case x of
76 (Int n1, Int n2) => n1 = n2 80 (Int n1, Int n2) => n1 = n2
77 | (Float n1, Float n2) => Real64.== (n1, n2) 81 | (Float n1, Float n2) => Real64.== (n1, n2)
78 | (String s1, String s2) => s1 = s2 82 | (String s1, String s2) => s1 = s2
83 | (Char ch1, Char ch2) => ch1 = ch2
79 84
80 | _ => false 85 | _ => false
81 86
82 fun compare (p1, p2) = 87 fun compare (p1, p2) =
83 case (p1, p2) of 88 case (p1, p2) of
85 | (Int _, _) => LESS 90 | (Int _, _) => LESS
86 | (_, Int _) => GREATER 91 | (_, Int _) => GREATER
87 92
88 | (Float n1, Float n2) => Real64.compare (n1, n2) 93 | (Float n1, Float n2) => Real64.compare (n1, n2)
89 | (Float _, _) => LESS 94 | (Float _, _) => LESS
90 | (_, Float _) => GREATER 95 | (_, Float _) => GREATER
91 96
92 | (String n1, String n2) => String.compare (n1, n2) 97 | (String n1, String n2) => String.compare (n1, n2)
98 | (String _, _) => LESS
99 | (_, String _) => GREATER
100
101 | (Char ch1, Char ch2) => Char.compare (ch1, ch2)
93 102
94 end 103 end