|
|
1.1 root 1: (* Copyright 1989 by AT&T Bell Laboratories *)
2: (* util/arrayext.sml *)
3:
4: signature ARRAYEXT =
5: sig
6: val copy : '1a array * int -> '1a array
7: val app : ('a -> 'b) * 'a array * int -> unit
8: val map : ('1a -> '1a) * '1a array * int -> '1a array
9: end
10:
11: structure ArrayExt : ARRAYEXT =
12: struct
13:
14: (* copy -- was copyarray. Used in EnvAccess and Parse *)
15: fun copy(a,n) =
16: (* assume n <= length a *)
17: let val new = array(n,a sub 0)
18: fun loop i = (update(new,i,a sub i); loop(i+1))
19: in loop 0
20: handle Subscript => new
21: end
22:
23: (* app -- was arrayapp. Used in SigMatch and Parse *)
24: fun app (f,a,start) =
25: let fun loop i = (f(a sub i); loop(i+1))
26: in loop start handle Subscript => ()
27: end
28:
29: (* map -- was arraymap. Used in SigMatch, and somewhat specialized *)
30: fun map (f,a,start) =
31: let val b = array(Array.length a, a sub 0) handle Subscript => a
32: fun loop i = (update(b,i,f(a sub i)); loop(i+1))
33: in loop start handle Subscript => b
34: end
35:
36: end
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.