diff --git a/thun/thun.pl b/thun/thun.pl index bd98254..b235003 100644 --- a/thun/thun.pl +++ b/thun/thun.pl @@ -192,8 +192,15 @@ combo(dipd, [P, X, Y|S], S, Ei, Eo) :- append(P, [Y, X|Ei], Eo). combo(dupdip, [P, X|S], [X|S], Ei, Eo) :- append(P, [X|Ei], Eo). -combo(branch, [T, _, true|S], S, Ei, Eo) :- append(T, Ei, Eo). -combo(branch, [_, F, false|S], S, Ei, Eo) :- append(F, Ei, Eo). +combo(branch, [T, _, true|S], S, Ei, Eo) :- !, append(T, Ei, Eo). +combo(branch, [_, F, false|S], S, Ei, Eo) :- !, append(F, Ei, Eo). +combo(branch, [T, F, Expr|S], S, Ei, Eo) :- + catch( + (Expr -> append(T, Ei, Eo) ; append(F, Ei, Eo)), + _, + try_both_branches(T, F, Ei, Eo) % in case of error. + ). + combo(loop, [_, false|S], S, E, E ). combo(loop, [B, true|S], S, Ei, Eo) :- append(B, [B, loop|Ei], Eo). @@ -213,6 +220,10 @@ combo(genrec, [R1, R0, Then, If|S], append(R0, [Quoted|R1], Else). +try_both_branches(T, _, Ei, Eo) :- append(T, Ei, Eo). +try_both_branches(_, F, Ei, Eo) :- append(F, Ei, Eo). + + /* Compiler */