| author | wenzelm | 
| Mon, 19 Oct 2009 23:02:23 +0200 | |
| changeset 33003 | 1c93cfa807bc | 
| parent 32960 | 69916a850301 | 
| child 33339 | d41f77196338 | 
| permissions | -rw-r--r-- | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 1 | (* Title: HOL/Import/lazy_seq.ML | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 2 | Author: Sebastian Skalberg, TU Muenchen | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 3 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 4 | Alternative version of lazy sequences. | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 5 | *) | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 6 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 7 | signature LAZY_SEQ = | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 8 | sig | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 9 | |
| 19089 | 10 | include EXTENDED_SCANNER_SEQ | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 11 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 12 | (* From LIST *) | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 13 | |
| 19089 | 14 | val fromString : string -> string seq | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 15 | val @ : 'a seq * 'a seq -> 'a seq | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 16 | val hd : 'a seq -> 'a | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 17 | val tl : 'a seq -> 'a seq | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 18 | val last : 'a seq -> 'a | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 19 |     val getItem : 'a seq -> ('a * 'a seq) option
 | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 20 | val nth : 'a seq * int -> 'a | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 21 | val take : 'a seq * int -> 'a seq | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 22 | val drop : 'a seq * int -> 'a seq | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 23 | val rev : 'a seq -> 'a seq | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 24 | val concat : 'a seq seq -> 'a seq | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 25 | val revAppend : 'a seq * 'a seq -> 'a seq | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 26 |     val app : ('a -> unit) -> 'a seq -> unit
 | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 27 |     val map : ('a -> 'b) -> 'a seq -> 'b seq
 | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 28 |     val mapPartial : ('a -> 'b option) -> 'a seq -> 'b seq
 | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 29 |     val find : ('a -> bool) -> 'a seq -> 'a option
 | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 30 |     val filter : ('a -> bool) -> 'a seq -> 'a seq
 | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 31 |     val partition : ('a -> bool)
 | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 32 | -> 'a seq -> 'a seq * 'a seq | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 33 |     val foldl : ('a * 'b -> 'b) -> 'b -> 'a seq -> 'b
 | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 34 |     val foldr : ('a * 'b -> 'b) -> 'b -> 'a seq -> 'b
 | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 35 |     val exists : ('a -> bool) -> 'a seq -> bool
 | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 36 |     val all : ('a -> bool) -> 'a seq -> bool
 | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 37 | val tabulate : int * (int -> 'a) -> 'a seq | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 38 |     val collate : ('a * 'a -> order)
 | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 39 | -> 'a seq * 'a seq -> order | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 40 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 41 | (* Miscellaneous *) | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 42 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 43 | val cycle : ((unit ->'a seq) -> 'a seq) -> 'a seq | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 44 |     val iterates   : ('a -> 'a) -> 'a -> 'a seq
 | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 45 | val of_function: (unit -> 'a option) -> 'a seq | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 46 | val of_string : string -> char seq | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 47 | val of_instream: TextIO.instream -> char seq | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 48 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 49 | (* From SEQ *) | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 50 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 51 |     val make: (unit -> ('a * 'a seq) option) -> 'a seq
 | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 52 | val empty: 'a -> 'a seq | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 53 | val cons: 'a * 'a seq -> 'a seq | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 54 | val single: 'a -> 'a seq | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 55 |     val try: ('a -> 'b) -> 'a -> 'b seq
 | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 56 | val chop: int * 'a seq -> 'a list * 'a seq | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 57 | val list_of: 'a seq -> 'a list | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 58 | val of_list: 'a list -> 'a seq | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 59 |     val mapp: ('a -> 'b) -> 'a seq -> 'b seq -> 'b seq
 | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 60 | val interleave: 'a seq * 'a seq -> 'a seq | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 61 | val print: (int -> 'a -> unit) -> int -> 'a seq -> unit | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 62 |     val it_right : ('a * 'b seq -> 'b seq) -> 'a seq * 'b seq -> 'b seq
 | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 63 | val commute: 'a seq list -> 'a list seq | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 64 | val succeed: 'a -> 'a seq | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 65 | val fail: 'a -> 'b seq | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 66 |     val THEN: ('a -> 'b seq) * ('b -> 'c seq) -> 'a -> 'c seq
 | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 67 |     val ORELSE: ('a -> 'b seq) * ('a -> 'b seq) -> 'a -> 'b seq
 | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 68 |     val APPEND: ('a -> 'b seq) * ('a -> 'b seq) -> 'a -> 'b seq
 | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 69 |     val EVERY: ('a -> 'a seq) list -> 'a -> 'a seq
 | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 70 |     val FIRST: ('a -> 'b seq) list -> 'a -> 'b seq
 | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 71 |     val TRY: ('a -> 'a seq) -> 'a -> 'a seq
 | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 72 |     val REPEAT: ('a -> 'a seq) -> 'a -> 'a seq
 | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 73 |     val REPEAT1: ('a -> 'a seq) -> 'a -> 'a seq
 | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 74 | val INTERVAL: (int -> 'a -> 'a seq) -> int -> int -> 'a -> 'a seq | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 75 |     val DETERM: ('a -> 'b seq) -> 'a -> 'b seq
 | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 76 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 77 | end | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 78 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 79 | structure LazySeq :> LAZY_SEQ = | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 80 | struct | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 81 | |
| 28971 | 82 | datatype 'a seq = Seq of ('a * 'a seq) option lazy
 | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 83 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 84 | exception Empty | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 85 | |
| 28673 
d746a8c12c43
renamed structure Susp to Lazy, and Susp.delay to Lazy.lazy;
 wenzelm parents: 
28670diff
changeset | 86 | fun getItem (Seq s) = Lazy.force s | 
| 19089 | 87 | val pull = getItem | 
| 28673 
d746a8c12c43
renamed structure Susp to Lazy, and Susp.delay to Lazy.lazy;
 wenzelm parents: 
28670diff
changeset | 88 | fun make f = Seq (Lazy.lazy f) | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 89 | |
| 19064 | 90 | fun null s = is_none (getItem s) | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 91 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 92 | local | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 93 | fun F n NONE = n | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 94 | | F n (SOME(_,s)) = F (n+1) (getItem s) | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 95 | in | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 96 | fun length s = F 0 (getItem s) | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 97 | end | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 98 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 99 | fun s1 @ s2 = | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 100 | let | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 101 | fun F NONE = getItem s2 | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 102 | | F (SOME(x,s1')) = SOME(x,F' s1') | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 103 | and F' s = make (fn () => F (getItem s)) | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 104 | in | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 105 | F' s1 | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 106 | end | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 107 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 108 | local | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 109 | fun F NONE = raise Empty | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 110 | | F (SOME arg) = arg | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 111 | in | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 112 | fun hd s = #1 (F (getItem s)) | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 113 | fun tl s = #2 (F (getItem s)) | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 114 | end | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 115 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 116 | local | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 117 | fun F x NONE = x | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 118 | | F _ (SOME(x,s)) = F x (getItem s) | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 119 | fun G NONE = raise Empty | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 120 | | G (SOME(x,s)) = F x (getItem s) | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 121 | in | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 122 | fun last s = G (getItem s) | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 123 | end | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 124 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 125 | local | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 126 | fun F NONE _ = raise Subscript | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 127 | | F (SOME(x,_)) 0 = x | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 128 | | F (SOME(_,s)) n = F (getItem s) (n-1) | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 129 | in | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 130 | fun nth(s,n) = | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 131 | if n < 0 | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 132 | then raise Subscript | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 133 | else F (getItem s) n | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 134 | end | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 135 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 136 | local | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 137 | fun F NONE _ = raise Subscript | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 138 | | F (SOME(x,s)) n = SOME(x,F' s (n-1)) | 
| 28673 
d746a8c12c43
renamed structure Susp to Lazy, and Susp.delay to Lazy.lazy;
 wenzelm parents: 
28670diff
changeset | 139 | and F' s 0 = Seq (Lazy.value NONE) | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 140 | | F' s n = make (fn () => F (getItem s) n) | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 141 | in | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 142 | fun take (s,n) = | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 143 | if n < 0 | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 144 | then raise Subscript | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 145 | else F' s n | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 146 | end | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 147 | |
| 19089 | 148 | fun take_at_most s n = | 
| 19064 | 149 | if n <= 0 then [] else | 
| 150 | case getItem s of | |
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 151 | NONE => [] | 
| 19089 | 152 | | SOME (x,s') => x::(take_at_most s' (n-1)) | 
| 19064 | 153 | |
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 154 | local | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 155 | fun F s 0 = s | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 156 | | F NONE _ = raise Subscript | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 157 | | F (SOME(_,s)) n = F (getItem s) (n-1) | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 158 | in | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 159 | fun drop (s,0) = s | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 160 | | drop (s,n) = | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 161 | if n < 0 | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 162 | then raise Subscript | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 163 | else make (fn () => F (getItem s) n) | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 164 | end | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 165 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 166 | local | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 167 | fun F s NONE = s | 
| 28673 
d746a8c12c43
renamed structure Susp to Lazy, and Susp.delay to Lazy.lazy;
 wenzelm parents: 
28670diff
changeset | 168 | | F s (SOME(x,s')) = F (SOME(x, Seq (Lazy.value s))) (getItem s') | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 169 | in | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 170 | fun rev s = make (fn () => F NONE (getItem s)) | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 171 | end | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 172 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 173 | local | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 174 | fun F s NONE = getItem s | 
| 28673 
d746a8c12c43
renamed structure Susp to Lazy, and Susp.delay to Lazy.lazy;
 wenzelm parents: 
28670diff
changeset | 175 | | F s (SOME(x,s')) = F (Seq (Lazy.value (SOME(x,s)))) (getItem s') | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 176 | in | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 177 | fun revAppend (s1,s2) = make (fn () => F s2 (getItem s1)) | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 178 | end | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 179 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 180 | local | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 181 | fun F NONE = NONE | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 182 | | F (SOME(s1,s2)) = | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 183 | let | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 184 | fun G NONE = F (getItem s2) | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 185 | | G (SOME(x,s)) = SOME(x,make (fn () => G (getItem s))) | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 186 | in | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 187 | G (getItem s1) | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 188 | end | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 189 | in | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 190 | fun concat s = make (fn () => F (getItem s)) | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 191 | end | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 192 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 193 | fun app f = | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 194 | let | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 195 | fun F NONE = () | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 196 | | F (SOME(x,s)) = | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 197 | (f x; | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 198 | F (getItem s)) | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 199 | in | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 200 | F o getItem | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 201 | end | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 202 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 203 | fun map f = | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 204 | let | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 205 | fun F NONE = NONE | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 206 | | F (SOME(x,s)) = SOME(f x,F' s) | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 207 | and F' s = make (fn() => F (getItem s)) | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 208 | in | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 209 | F' | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 210 | end | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 211 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 212 | fun mapPartial f = | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 213 | let | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 214 | fun F NONE = NONE | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 215 | | F (SOME(x,s)) = | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 216 | (case f x of | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 217 | SOME y => SOME(y,F' s) | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 218 | | NONE => F (getItem s)) | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 219 | and F' s = make (fn()=> F (getItem s)) | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 220 | in | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 221 | F' | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 222 | end | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 223 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 224 | fun find P = | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 225 | let | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 226 | fun F NONE = NONE | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 227 | | F (SOME(x,s)) = | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 228 | if P x | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 229 | then SOME x | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 230 | else F (getItem s) | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 231 | in | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 232 | F o getItem | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 233 | end | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 234 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 235 | (*fun filter p = mapPartial (fn x => if p x then SOME x else NONE)*) | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 236 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 237 | fun filter P = | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 238 | let | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 239 | fun F NONE = NONE | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 240 | | F (SOME(x,s)) = | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 241 | if P x | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 242 | then SOME(x,F' s) | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 243 | else F (getItem s) | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 244 | and F' s = make (fn () => F (getItem s)) | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 245 | in | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 246 | F' | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 247 | end | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 248 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 249 | fun partition f s = | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 250 | let | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 251 | val s' = map (fn x => (x,f x)) s | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 252 | in | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 253 | (mapPartial (fn (x,true) => SOME x | _ => NONE) s', | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 254 | mapPartial (fn (x,false) => SOME x | _ => NONE) s') | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 255 | end | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 256 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 257 | fun exists P = | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 258 | let | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 259 | fun F NONE = false | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 260 | | F (SOME(x,s)) = P x orelse F (getItem s) | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 261 | in | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 262 | F o getItem | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 263 | end | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 264 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 265 | fun all P = | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 266 | let | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 267 | fun F NONE = true | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 268 | | F (SOME(x,s)) = P x andalso F (getItem s) | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 269 | in | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 270 | F o getItem | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 271 | end | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 272 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 273 | (*fun tabulate f = map f (iterates (fn x => x + 1) 0)*) | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 274 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 275 | fun tabulate (n,f) = | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 276 | let | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 277 | fun F n = make (fn () => SOME(f n,F (n+1))) | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 278 | in | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 279 | F n | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 280 | end | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 281 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 282 | fun collate c (s1,s2) = | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 283 | let | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 284 | fun F NONE _ = LESS | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 285 | | F _ NONE = GREATER | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 286 | | F (SOME(x,s1)) (SOME(y,s2)) = | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 287 | (case c (x,y) of | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 288 | LESS => LESS | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 289 | | GREATER => GREATER | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 290 | | EQUAL => F' s1 s2) | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 291 | and F' s1 s2 = F (getItem s1) (getItem s2) | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 292 | in | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 293 | F' s1 s2 | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 294 | end | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 295 | |
| 28673 
d746a8c12c43
renamed structure Susp to Lazy, and Susp.delay to Lazy.lazy;
 wenzelm parents: 
28670diff
changeset | 296 | fun empty _ = Seq (Lazy.value NONE) | 
| 
d746a8c12c43
renamed structure Susp to Lazy, and Susp.delay to Lazy.lazy;
 wenzelm parents: 
28670diff
changeset | 297 | fun single x = Seq(Lazy.value (SOME(x,Seq (Lazy.value NONE)))) | 
| 
d746a8c12c43
renamed structure Susp to Lazy, and Susp.delay to Lazy.lazy;
 wenzelm parents: 
28670diff
changeset | 298 | fun cons a = Seq(Lazy.value (SOME a)) | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 299 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 300 | fun cycle seqfn = | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 301 | let | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 302 | val knot = Unsynchronized.ref (Seq (Lazy.value NONE)) | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 303 | in | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 304 | knot := seqfn (fn () => !knot); | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 305 | !knot | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 306 | end | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 307 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 308 | fun iterates f = | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 309 | let | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 310 | fun F x = make (fn() => SOME(x,F (f x))) | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 311 | in | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 312 | F | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 313 | end | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 314 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 315 | fun interleave (s1,s2) = | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 316 | let | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 317 | fun F NONE = getItem s2 | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 318 | | F (SOME(x,s1')) = SOME(x,interleave(s2,s1')) | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 319 | in | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 320 | make (fn()=> F (getItem s1)) | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 321 | end | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 322 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 323 | (* val force_all = app ignore *) | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 324 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 325 | local | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 326 | fun F NONE = () | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 327 | | F (SOME(x,s)) = F (getItem s) | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 328 | in | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 329 | fun force_all s = F (getItem s) | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 330 | end | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 331 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 332 | fun of_function f = | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 333 | let | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 334 | fun F () = case f () of | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 335 | SOME x => SOME(x,make F) | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 336 | | NONE => NONE | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 337 | in | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 338 | make F | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 339 | end | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 340 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 341 | local | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 342 | fun F [] = NONE | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 343 | | F (x::xs) = SOME(x,F' xs) | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 344 | and F' xs = make (fn () => F xs) | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 345 | in | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 346 | fun of_list xs = F' xs | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 347 | end | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 348 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 349 | val of_string = of_list o String.explode | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 350 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 351 | fun of_instream is = | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 352 | let | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 353 | val buffer : char list Unsynchronized.ref = Unsynchronized.ref [] | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 354 | fun get_input () = | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 355 | case !buffer of | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 356 | (c::cs) => (buffer:=cs; | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 357 | SOME c) | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 358 | | [] => (case String.explode (TextIO.input is) of | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 359 | [] => NONE | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 360 | | (c::cs) => (buffer := cs; | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 361 | SOME c)) | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 362 | in | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 363 | of_function get_input | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 364 | end | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 365 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 366 | local | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 367 | fun F k NONE = k [] | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 368 | | F k (SOME(x,s)) = F (fn xs => k (x::xs)) (getItem s) | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 369 | in | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 370 | fun list_of s = F (fn x => x) (getItem s) | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 371 | end | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 372 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 373 | (* Adapted from seq.ML *) | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 374 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 375 | val succeed = single | 
| 28673 
d746a8c12c43
renamed structure Susp to Lazy, and Susp.delay to Lazy.lazy;
 wenzelm parents: 
28670diff
changeset | 376 | fun fail _ = Seq (Lazy.value NONE) | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 377 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 378 | (* fun op THEN (f, g) x = flat (map g (f x)) *) | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 379 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 380 | fun op THEN (f, g) = | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 381 | let | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 382 | fun F NONE = NONE | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 383 | | F (SOME(x,xs)) = | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 384 | let | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 385 | fun G NONE = F (getItem xs) | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 386 | | G (SOME(y,ys)) = SOME(y,make (fn () => G (getItem ys))) | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 387 | in | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 388 | G (getItem (g x)) | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 389 | end | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 390 | in | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 391 | fn x => make (fn () => F (getItem (f x))) | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 392 | end | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 393 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 394 | fun op ORELSE (f, g) x = | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 395 | make (fn () => | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 396 | case getItem (f x) of | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 397 | NONE => getItem (g x) | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 398 | | some => some) | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 399 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 400 | fun op APPEND (f, g) x = | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 401 | let | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 402 | fun copy s = | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 403 | case getItem s of | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 404 | NONE => getItem (g x) | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 405 | | SOME(x,xs) => SOME(x,make (fn () => copy xs)) | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 406 | in | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 407 | make (fn () => copy (f x)) | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 408 | end | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 409 | |
| 30190 | 410 | fun EVERY fs = List.foldr (op THEN) succeed fs | 
| 411 | fun FIRST fs = List.foldr (op ORELSE) fail fs | |
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 412 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 413 | fun TRY f x = | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 414 | make (fn () => | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 415 | case getItem (f x) of | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 416 | NONE => SOME(x,Seq (Lazy.value NONE)) | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 417 | | some => some) | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 418 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 419 | fun REPEAT f = | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 420 | let | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 421 | fun rep qs x = | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 422 | case getItem (f x) of | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 423 | NONE => SOME(x, make (fn () => repq qs)) | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 424 | | SOME (x', q) => rep (q :: qs) x' | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 425 | and repq [] = NONE | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 426 | | repq (q :: qs) = | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 427 | case getItem q of | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 428 | NONE => repq qs | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 429 | | SOME (x, q) => rep (q :: qs) x | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 430 | in | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 431 | fn x => make (fn () => rep [] x) | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 432 | end | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 433 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 434 | fun REPEAT1 f = op THEN (f, REPEAT f); | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 435 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 436 | fun INTERVAL f i = | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 437 | let | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 438 | fun F j = | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 439 | if i > j | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 440 | then single | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 441 | else op THEN (f j, F (j - 1)) | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 442 | in F end | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 443 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 444 | fun DETERM f x = | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 445 | make (fn () => | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 446 | case getItem (f x) of | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 447 | NONE => NONE | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 448 | | SOME (x', _) => SOME(x',Seq (Lazy.value NONE))) | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 449 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 450 | (*partial function as procedure*) | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 451 | fun try f x = | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 452 | make (fn () => | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 453 | case Basics.try f x of | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 454 | SOME y => SOME(y,Seq (Lazy.value NONE)) | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 455 | | NONE => NONE) | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 456 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 457 | (*functional to print a sequence, up to "count" elements; | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 458 | the function prelem should print the element number and also the element*) | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 459 | fun print prelem count seq = | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 460 | let | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 461 | fun pr k xq = | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 462 | if k > count | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 463 | then () | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 464 | else | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 465 | case getItem xq of | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 466 | NONE => () | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 467 | | SOME (x, xq') => | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 468 | (prelem k x; | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 469 | writeln ""; | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 470 | pr (k + 1) xq') | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 471 | in | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 472 | pr 1 seq | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 473 | end | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 474 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 475 | (*accumulating a function over a sequence; this is lazy*) | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 476 | fun it_right f (xq, yq) = | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 477 | let | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 478 | fun its s = | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 479 | make (fn () => | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 480 | case getItem s of | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 481 | NONE => getItem yq | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 482 | | SOME (a, s') => getItem(f (a, its s'))) | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 483 | in | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 484 | its xq | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 485 | end | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 486 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 487 | (*map over a sequence s1, append the sequence s2*) | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 488 | fun mapp f s1 s2 = | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 489 | let | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 490 | fun F NONE = getItem s2 | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 491 | | F (SOME(x,s1')) = SOME(f x,F' s1') | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 492 | and F' s = make (fn () => F (getItem s)) | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 493 | in | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 494 | F' s1 | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 495 | end | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 496 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 497 | (*turn a list of sequences into a sequence of lists*) | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 498 | local | 
| 28673 
d746a8c12c43
renamed structure Susp to Lazy, and Susp.delay to Lazy.lazy;
 wenzelm parents: 
28670diff
changeset | 499 | fun F [] = SOME([],Seq (Lazy.value NONE)) | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 500 | | F (xq :: xqs) = | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 501 | case getItem xq of | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 502 | NONE => NONE | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 503 | | SOME (x, xq') => | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 504 | (case F xqs of | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 505 | NONE => NONE | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 506 | | SOME (xs, xsq) => | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 507 | let | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 508 | fun G s = | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 509 | make (fn () => | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 510 | case getItem s of | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 511 | NONE => F (xq' :: xqs) | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 512 | | SOME(ys,ysq) => SOME(x::ys,G ysq)) | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 513 | in | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 514 | SOME (x :: xs, G xsq) | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 515 | end) | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 516 | in | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 517 | fun commute xqs = make (fn () => F xqs) | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 518 | end | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 519 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 520 | (*the list of the first n elements, paired with rest of sequence; | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 521 | if length of list is less than n, then sequence had less than n elements*) | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 522 | fun chop (n, xq) = | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 523 | if n <= 0 | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 524 | then ([], xq) | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 525 | else | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 526 | case getItem xq of | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 527 | NONE => ([], xq) | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 528 | | SOME (x, xq') => apfst (Basics.cons x) (chop (n - 1, xq')) | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 529 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 530 | fun foldl f e s = | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 531 | let | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 532 | fun F k NONE = k e | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 533 | | F k (SOME(x,s)) = F (fn y => k (f(x,y))) (getItem s) | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 534 | in | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 535 | F (fn x => x) (getItem s) | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 536 | end | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 537 | |
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 538 | fun foldr f e s = | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 539 | let | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 540 | fun F e NONE = e | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 541 | | F e (SOME(x,s)) = F (f(x,e)) (getItem s) | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 542 | in | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
32740diff
changeset | 543 | F e (getItem s) | 
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 544 | end | 
| 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 545 | |
| 19095 | 546 | fun fromString s = of_list (explode s) | 
| 19089 | 547 | |
| 17802 
f3b1ca16cebd
moved susp.ML, lazy_seq.ML, lazy_scan.ML to HOL/Import;
 wenzelm parents: diff
changeset | 548 | end | 
| 19089 | 549 | |
| 550 | structure LazyScan = Scanner (structure Seq = LazySeq) | |
| 551 |