equal
deleted
inserted
replaced
15 val current: T -> Proof.state |
15 val current: T -> Proof.state |
16 val previous: T -> Proof.state option |
16 val previous: T -> Proof.state option |
17 val clear: int -> T -> T |
17 val clear: int -> T -> T |
18 val undo: T -> T |
18 val undo: T -> T |
19 val redo: T -> T |
19 val redo: T -> T |
20 val back: bool -> T -> T |
20 val back: T -> T |
21 val applys: (Proof.state -> Proof.state Seq.seq) -> T -> T |
21 val applys: (Proof.state -> Proof.state Seq.seq) -> T -> T |
22 val apply: (Proof.state -> Proof.state) -> T -> T |
22 val apply: (Proof.state -> Proof.state) -> T -> T |
23 end; |
23 end; |
24 |
24 |
25 structure ProofHistory: PROOF_HISTORY = |
25 structure ProofHistory: PROOF_HISTORY = |
53 val clear = app o History.clear; |
53 val clear = app o History.clear; |
54 val undo = app History.undo; |
54 val undo = app History.undo; |
55 val redo = app History.redo; |
55 val redo = app History.redo; |
56 |
56 |
57 |
57 |
58 (* backtrack *) |
58 (* backtracking *) |
59 |
59 |
60 fun backtrack recur ((_, stq), nodes) = |
60 val back = hist_app (fn ((_, stq), nodes) => |
61 (case Seq.pull stq of |
61 (case Seq.pull stq of |
62 NONE => |
62 NONE => raise FAIL "back: no alternatives" |
63 if recur andalso not (null nodes) then |
63 | SOME result => (result, nodes))); |
64 (writeln "back: trying previous proof state ..."; backtrack recur (hd nodes, tl nodes)) |
|
65 else raise FAIL "back: no alternatives" |
|
66 | SOME result => (result, nodes)); |
|
67 |
|
68 val back = hist_app o backtrack; |
|
69 |
64 |
70 |
65 |
71 (* apply transformer *) |
66 (* apply transformer *) |
72 |
67 |
73 fun applys f = hist_app (fn (node as (st, _), nodes) => |
68 fun applys f = hist_app (fn (node as (st, _), nodes) => |