?- lookup(n, [], Val). Val = n. ?- lookup(n, [b(m,5),b(n,10)], Val). Val = 10 ; false. ?- lookup(n, [b(n,5),b(n,10)], Val). Val = 5 ; false. ?- lookup(n, [b(m,10)], Val). Val = n.
% Rule 1: There's a constant at the top of the control stack. Pop it % off of C and push it onto S. % transform(secd(S, E, [C|Cs], D), secd([C|S], E, Cs, D)) :- integer(C).
?- reduce(secd([7],[],[],[]), Val). Val = 7. ?- reduce(secd([],[b(n,5),b(n,10)],[n],[]),Val). Val = 5 ; false. ?- reduce(secd([], | [], | [app(lam(l,app(l,lam(x,lam(y,x)))), | app(app(lam(h,lam(t,lam(s,app(app(s,h),t)))),5), | app(app(lam(h,lam(t,lam(s,app(app(s,h),t)))),6),0)))], | []), Val). Val = 5 ; false.
?- eval(5,X). X = 5 ; false. ?- eval(app(lam(x,lam(y,x)), 5), X). X = cl(y, x, [b(x, 5)]) ; false. ?- eval(app(lam(l,app(l,lam(x,lam(y,x)))), | app(app(lam(h,lam(t,lam(s,app(app(s,h),t)))),5), | app(app(lam(h,lam(t,lam(s,app(app(s,h),t)))),6),0))), | Result). Result = 5 ; false.
?- eval(app(inc,3), R). R = 4 ; false. ?- eval(app(dec,7), R). R = 6 ; false. ?- eval(app(dec,app(dec,7)), R). R = 5 ; false. ?- eval(app(iszero,0), R). R = cl(x, lam(y, x), []) ; false. ?- eval(app(iszero,5), R). R = cl(x, lam(y, y), []) ; false. ?- IF=lam(p,lam(t,lam(f,app(app(p,t),f)))), | eval(app(app(app(IF,app(iszero,2)), 1), 0), R). IF = lam(p, lam(t, lam(f, app(app(p, t), f)))) R = 0 ; false.