declare fun {GetLast S}
if S.2 == nil then S.1 else {GetLast S.2} end
end
declare fun {And c1 c2}
if c1 then
if c2 then
true
else
false
end
else
false
end
end
% Assemble a Beta Reduction
% B is a string that contains already done inclusions
% A is the list that needs to have I between each member
fun {B_Assemble I B A}
{Browse [I B A]}
if A == nil then B else {B_Assemble I {Append {Append B I} A.1} A.2} end
end
% Beta Reduction Main Function
% V is the variable such that \x where V = x
% E is the function expression e such that \x.e
% A is the function application expression e1 suc hthat \x.e e1
fun {Beta V E A}
if {And (E.1 == V.1) ({GetLast E} == V.1)} then
{B_Assemble A "" {Append {Append [""] {String.tokens E V.1} [""]}}}
else
if {E.1 == V.1} then
{B_Assemble A "" {Append [""] {String.tokens E V.1}}}
else if {GetLast E} == V.1 then
{B_Assemble A "" {Append {String.tokens E V.1} [""]}}
else
{B_Assemble A "" {String.tokens E V.1}}
end
end
end
ZGVjbGFyZSBmdW4ge0dldExhc3QgU30KICAgICAgIGlmIFMuMiA9PSBuaWwgdGhlbiBTLjEgZWxzZSB7R2V0TGFzdCBTLjJ9IGVuZAplbmQKZGVjbGFyZSBmdW4ge0FuZCBjMSBjMn0KICAgIGlmIGMxIHRoZW4KICAgICAgICBpZiBjMiB0aGVuCiAgICAgICAgICAgIHRydWUKICAgICAgICBlbHNlCiAgICAgICAgICAgIGZhbHNlCiAgICAgICAgZW5kCiAgICBlbHNlIAogICAgICAgIGZhbHNlCiAgICBlbmQKZW5kCiUgQXNzZW1ibGUgYSBCZXRhIFJlZHVjdGlvbgolIEIgaXMgYSBzdHJpbmcgdGhhdCBjb250YWlucyBhbHJlYWR5IGRvbmUgaW5jbHVzaW9ucwolIEEgaXMgdGhlIGxpc3QgdGhhdCBuZWVkcyB0byBoYXZlIEkgYmV0d2VlbiBlYWNoIG1lbWJlcgpmdW4ge0JfQXNzZW1ibGUgSSBCIEF9CiAgIHtCcm93c2UgW0kgQiBBXX0KICAgIGlmIEEgPT0gbmlsIHRoZW4gQiBlbHNlIHtCX0Fzc2VtYmxlIEkge0FwcGVuZCB7QXBwZW5kIEIgSX0gQS4xfSBBLjJ9IGVuZAplbmQKCiUgQmV0YSBSZWR1Y3Rpb24gTWFpbiBGdW5jdGlvbgolIFYgaXMgdGhlIHZhcmlhYmxlIHN1Y2ggdGhhdCBceCB3aGVyZSBWID0geAolIEUgaXMgdGhlIGZ1bmN0aW9uIGV4cHJlc3Npb24gZSBzdWNoIHRoYXQgXHguZQolIEEgaXMgdGhlIGZ1bmN0aW9uIGFwcGxpY2F0aW9uIGV4cHJlc3Npb24gZTEgc3VjIGh0aGF0IFx4LmUgZTEKCgpmdW4ge0JldGEgViBFIEF9CiAgICBpZiB7QW5kIChFLjEgPT0gVi4xKSAoe0dldExhc3QgRX0gPT0gVi4xKX0gdGhlbgogICAgICAge0JfQXNzZW1ibGUgQSAiIiB7QXBwZW5kIHtBcHBlbmQgWyIiXSB7U3RyaW5nLnRva2VucyBFIFYuMX0gWyIiXX19fQogICAgZWxzZQogICAgICAgIGlmIHtFLjEgPT0gVi4xfSB0aGVuCiAgICAgICAgICAgIHtCX0Fzc2VtYmxlIEEgIiIge0FwcGVuZCBbIiJdIHtTdHJpbmcudG9rZW5zIEUgVi4xfX19CiAgICAgICAgZWxzZSBpZiB7R2V0TGFzdCBFfSA9PSBWLjEgdGhlbiAgCiAgICAgICAgICAgIHtCX0Fzc2VtYmxlIEEgIiIge0FwcGVuZCB7U3RyaW5nLnRva2VucyBFIFYuMX0gWyIiXX19CiAgICAgICAgZWxzZQogICAgICAgICAgICB7Ql9Bc3NlbWJsZSBBICIiIHtTdHJpbmcudG9rZW5zIEUgVi4xfX0KICAgICAgICBlbmQKICAgIGVuZAplbmQK
Mozart Compiler 1.4.0 (20080704) playing Oz 3
%%% feeding file prog.oz
%*************************** parse error ************************
%**
%** syntax error, unexpected T_ENDOFFILE, expecting T_end
%**
%** in file "./prog.oz", line 42, column 0
%** ------------------ rejected (1 error)