|
|
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.