1 definition module StdEnvExt
3 /** Collection of generally useful functions that are not related to SoccerFun.
9 is a frequently occurring version of the const function.
11 const2 :: !.a .b .c -> .a
14 is the state based version of iterate (StdList):
20 iterateSt :: !(s -> (a,s)) !s -> [a]
23 is the finite version of iterateSt.
25 iterateStn :: !Int !(s -> (a,s)) !s -> (![a],!s)
27 /** State strict versions of seq and seqList:
29 sseq :: ![.(.s -> .s)] !.s -> .s
30 sseqList:: ![St .s .a] !.s -> (![.a],!.s)
32 /** apply x [f_0 ... f_n] = [f_0 x, ..., f_n x]
34 apply :: a ![a->.b] -> [.b]
36 /** State passing version of map:
38 mapSt :: !(.(.a,.s) -> .(.b,.s)) !(![.a],.s) -> (![.b],.s)
40 /** Strict state passing version of map:
42 smapSt :: !(.(.a,.s) -> .(.b,.s)) !(![.a],!.s) -> (![.b],!.s)
44 /** singleOutElems [a_1..a_n] = [(a_1,[a_2..a_n]),(a_2,[a_1,a_3..a_n])..(a_n,[a_1..a_(n-1)])]
46 singleOutElems :: ![a] -> [(a,[a])]
48 /** hdtl [a:as] = (a,as)
50 hdtl :: ![a] -> (a,[a])
52 /** isSingleton [_] = True;
53 isSingleton _ = False.
55 isSingleton :: ![a] -> Bool
57 /** filterSt cond xs st
58 filters all elements from xs using a state parameter st that is threaded along.
60 filterSt :: (a .s -> (Bool,.s)) !.[a] !.s -> (.[a],.s)
62 /** spanfilter cond xs = (filter cond xs, filter (not o cond) xs)
63 spanfilterSt cond xs st
64 same, but with state parameter st that is threaded along.
66 spanfilter :: (a -> Bool) !.[a] -> (.[a],.[a])
67 spanfilterSt :: (a .s -> (Bool,.s)) !.[a] .s -> (.(.[a],.[a]),.s)
69 /** find1 cond (A ++ [a] ++ B) = a
70 where for each x in A: not (cond x) /\ cond a
72 find1 :: !(a -> Bool) ![a] -> a
74 /** break cond (A ++ B ++ C) = (A,B,C)
75 where for each x in A: not (cond x) /\
76 for each x in B: (cond x) /\
77 if C=[x:_]: not (cond x)
79 break :: !(a -> Bool) ![a] -> (![a],![a],![a])
81 /** break1 cond (A ++ [B] ++ C) = (A,B,C)
82 where for each x in A: not (cond x) /\
84 if C=[x:_]: not (cond x)
86 break1 :: !(a -> Bool) ![a] -> (![a],!a,![a])
88 /** unbreak (a,b,c) = a ++ b ++ c
90 unbreak :: !(![a],![a],![a]) -> [a]
92 /** unbreak1 (a,b,c) = a ++ [b] ++ c
94 unbreak1 :: !(![a],!a,![a]) -> [a]
96 /** [a_1..x..a_n] ?? x = i
101 [a_1..x..a_n] ??? c = i
103 not (c a_j) for all j<i
106 (??) infixl 9 :: ![a] !a -> Int | == a
107 (???)infixl 9 :: ![a] !(a -> Bool) -> Int
109 /** weave [a_1..a_n] [b_1..b_m]
110 = [a_1,b_1, a_2,b_2, ... ]
112 weave :: ![a] [a] -> [a]
114 /** unweave [a_1,a_2..a_n]
115 = ([a_1,a_3..],[a_2,a_4..])
117 unweave :: ![a] -> ([a],[a])
119 /** unweave_n n [a_1..a_n, a_{n+1}..a_{2n} ..]
120 = [[a_1,a_{n+1}..],[a_2,a_{n+2}..] ..]
122 unweave_n :: !Int [a] -> [[a]]
124 /** Immediate instances of toString for (,), (,,) and Maybe
126 instance toString (a,b) | toString a & toString b
127 instance toString (a,b,c) | toString a & toString b & toString c
128 instance toString (Maybe a) | toString a
130 /** Useful string concatenation function
132 (<+++) infixl :: !String !a -> String | toString a
133 (+++>) infixr :: !a !String -> String | toString a
135 /** showList inf [x_0 ... x_n] = "<x_0><inf>...<inf><x_n>"
136 showListF inf f [x_0 ... x_n] = "<f x_0><inf>...<inf><f x_n>"
138 showList :: !String !.[a] -> String | toString a
139 showListF :: !String !(a -> String) !.[a] -> String
141 /** Association lists a la Haskell.
143 :: AssocList k v :== [ (!k,v)]
145 /** lookup k [...(k,v)...] = Just v
148 lookup :: !k !(AssocList k v) -> Maybe v | Eq k
150 /** lookup _ k [...(k,v)...] = v
153 lookupd :: v !k !(AssocList k v) -> v | Eq k
155 /** keymember k [...(k,v)...] = True
156 keymember _ _ = False
158 keymember :: !k !(AssocList k v) -> Bool | Eq k
160 /** addkeyvalue (k,v) [...(k,_)...] = [...(k,v)...]
161 addkeyvalue _ assocl = assocl ++ [(k,v)]
163 addkeyvalue :: !(!k,v) !(AssocList k v) -> AssocList k v | Eq k
165 /** updkeyvalue k f [...(k,v)...] = [...(k,f v)...]
166 updkeyvalue _ _ assocl = assocl
168 updkeyvalue :: !k !(v -> v) !(AssocList k v) -> AssocList k v | Eq k
170 /** deletekeyvalue k [...(k,v)...] = [... ...]
171 deletekeyvalue _ assocl = assocl
173 deletekeyvalue :: !k !(AssocList k v) -> AssocList k v | Eq k
175 /** isAllMember xs ys is true iff all elements of xs are member of ys.
177 isAllMember :: ![a] [a] -> Bool | Eq a
179 /** zipWith f as bs = [f a_0 b_0, f a_1 b_1, ..., f a_n b_n]
181 zipWith :: (a b -> c) ![a] ![b] -> [c]
183 /** setbetween x low up
184 returns x iff low <= x <= up
185 returns low iff low > x
186 returns up iff x > up
188 setbetween :: !a !a !a -> a | Ord a
190 /** isbetween x low up
191 returns True iff low <= x <= up
193 isbetween :: !a !a !a -> Bool | Ord a
195 /** minmax (a,b) = (a,b) if a<=b; (b,a) otherwise
197 minmax :: !(!a,!a) -> (!a,!a) | Ord a
199 /** swap (a,b) = (b,a)
201 swap :: !(.a,.b) -> (.b,.a)
207 /** foldl1 f xs folds f to the left over non-empty list xs.
209 foldl1 :: !(a -> a -> a) ![a] -> a
211 /** foldr1 f xs folds f to the right over non-empty list xs.
213 foldr1 :: !(a -> a -> a) ![a] -> a
215 /* removeQuotes str removes all quotes and slashes from str.
217 removeQuotes :: !{#Char} -> String
219 /** stringStarts str prefix yields true iff str = prefix +++ s for some s.
221 stringStarts :: !String !String -> Bool
223 /** removePrefix str prefix yields (Just s) iff str = prefix +++ s, and Nothing otherwise.
225 removePrefix :: !String !String -> Maybe String
227 replaceInString :: !String !String !String -> String
229 /** other a yields the only other value of a domain that consists of two values.
231 class other a :: !a -> a
233 /** isSorted [x_0..x_n] holds iff x_i <= x_{i+1} for each x_i in [x_0..x_{n-1}].
235 isSorted :: ![a] -> Bool | Ord a
237 /** perhaps p Nothing = False, and perhaps p (Just a) = p a
239 perhaps :: !(a -> Bool) !(Maybe a) -> Bool
241 /** instance ~ Bool = not
245 /** instance fromString Int = toInt
247 instance fromString Int
249 /** better class definitions of the trigonometry functions:
251 class sinus a :: !a -> Real
252 class cosinus a :: !a -> Real
253 class tangens a :: !a -> Real
254 class arcsinus a :: !Real -> a
255 class arccosinus a :: !Real -> a
256 class arctangens a :: !Real -> a
259 instance cosinus Real
260 instance tangens Real
261 instance arcsinus Real
262 instance arccosinus Real
263 instance arctangens Real