X-Git-Url: http://lambda.jimpryor.net/git/gitweb.cgi?p=lambda.git;a=blobdiff_plain;f=code%2Fski_evaluator.ml;h=727a84a5f2c084c5b2efbb6eee6fed231a0a93a1;hp=7837880365057978397f4678c542773f114708af;hb=908143f5f416416081b24715bfc567cbea0aeff4;hpb=4e5741cd8c63a133973ab4eaf3d78d9a31ff401c diff --git a/code/ski_evaluator.ml b/code/ski_evaluator.ml index 78378803..727a84a5 100644 --- a/code/ski_evaluator.ml +++ b/code/ski_evaluator.ml @@ -42,7 +42,7 @@ let rec reduce_try3 (t:term):term = match t with type to emphasize the parallels with the untyped interpreter. *) type reduceOutcome = AlreadyReduced | ReducedTo of term - let reduce_if_redex (t : term) : term = match t with + let reduce_if_redex (t : term) : reduceOutcome = match t with | App(I,a) -> ReducedTo a | App(App(K,a),b) -> ReducedTo a | App(App(App(S,a),b),c) -> ReducedTo (App(App(a,c),App(b,c))) @@ -53,7 +53,7 @@ let rec reduce_try3 (t:term):term = match t with | K -> K | S -> S | App(a, b) -> - let t' = App(reduce_try3 a, reduce_try b) in + let t' = App(reduce_try4 a, reduce_try4 b) in (match reduce_if_redex t' with | ReducedTo t'' -> reduce_try4 t'' | AlreadyReduced -> t') @@ -64,7 +64,7 @@ let rec reduce_try3 (t:term):term = match t with type reduceOutcome = AlreadyReduced | ReducedTo of term - let rec reduce_once (t : term) : term = match t with + let rec reduce_once (t : term) : reduceOutcome = match t with | App(a, b) -> (match reduce_once a with | ReducedTo a' -> ReducedTo (App(a',b)) | AlreadyReduced -> (match reduce_once b with @@ -96,7 +96,7 @@ let rec reduce_try3 (t:term):term = match t with | App(App(App(S,_),_),_) -> true | _ -> false - let rec reduce_head_once (t : term) : term = match t with + let rec reduce_head_once (t : term) : reduceOutcome = match t with | App(a, b) -> (match reduce_head_once a with | ReducedTo a' -> ReducedTo (App(a',b)) (* now we only try to reduce b when App(a,b) is a redex *)