Mercurial > urweb
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 |