%t Any;generate_ Relation Any Any Any Functor String;generate_ Relation;generate_body_ Relation Any Any Functor String;generate_body_ Relation;run Relation Any Any Any Any Any Any;run Relation;eval Relation Any;eval Relation;generate Relation Functor String String Any Any Any;generate Relation;notblank Relation Any;notblank Relation;serialize_item Relation Functor String;serialize_item Relation;each3 Relation Any Any;each3 Relation;each2 Relation Any Any;each2 Relation;concat_if Relation Any Any Any;concat_if Relation;generate_stm Relation Any Any Functor String;generate_stm Relation;header Relation Any;header Relation;generate_body Relation Functor String Any Any;generate_body Relation;get_stm Relation;compare_types Relation Any Any Any Any Any;compare_types Relation;specialize_type Relation Any Any Any Any Any;specialize_type Relation;extract_type Relation Any Any Any;to_table_type Relation Any Any Any Any;to_table_type Relation;set_type Relation Any Any Any Any;set_type Relation;env_update Relation Any Any Any Any;env_update Relation;generate_rel Relation Any Any Functor String;generate_rel Relation;generate_fact Relation Any Any Functor String;generate_fact Relation;extract_type_information Relation String Functor;extract_type_information Relation;term Relation Functor String Any Any String;term Relation;pushid Relation;check_type Relation Any Any Any;check_type Relation;get_type Relation Any Any Any;get_type Relation;is_num Relation Any;is_num Relation;assert Relation Any Any;assert Relation;make_rel Relation Any Any Any Any Any Any;make_rel Relation;term_ Relation Functor String Any Any;term_ Relation;to_list Relation Any String Any Any Any;to_list Relation;to_table Relation Any Any Any String Any Any Any Any;to_table Relation;table_eq Relation Any Any Any Any Any Any;table_eq Relation;filter Relation Any Any;filter Relation;func Relation Functor String Any Any Any;func Relation;listify Relation Any Any Any Any Any;listify Relation;setup_pred Relation Any Any Any Any Any Any Any;setup_pred Relation;apply Relation Any Any Any;apply Relation;lambda5 Relation Any Any Any;lambda5 Relation;lambda4 Relation Any Any Any;lambda4 Relation;lambda6 Relation Any Any Any;lambda6 Relation;extract_args Relation Any Any Any Any Any;extract_args Relation;term Relation Any Any Any Any Any;compare_relation Relation Any Any Any Any Any;compare_relation Relation;eq2 Relation Any Any;eq2 Relation;eq3 Relation Any Any;eq3 Relation;setup_var Relation Any Any Any Any;setup_var Relation;setup_var2 Relation Any Any Any Any;setup_var2 Relation;var2 Relation Any Any Any Any;var2 Relation;map1 Relation Any Any Any;map1 Relation;new_env Relation Any;new_env Relation;env_from Relation Any Any;env_from Relation;env_make Relation Any Any;env_make Relation;varname Relation Any Any;varname Relation;generate_cond_normal Relation Any Any Any Any;generate_cond_normal Relation;generate_cond_nest Relation Any Any Any Any Any;generate_cond_nest Relation;neg Relation Any Any;neg Relation;generate_cond Relation Any Any Any Any;generate_cond Relation;generate_body Relation Functor String Functor Functor;push_var Relation Any Any Any Any;push_var Relation;push_types Relation Any Any Any Any;push_types Relation;extract_type_args Relation Any Any Any;extract_types Relation Any Any Any;send Relation Any Any;send Relation;extract_type Relation;extract_type_id Relation Any Any Any Any;extract_type_id Relation;extract_types Relation;extract_type_args Relation;is_functor Relation Any Any;is_functor Relation;sym Relation Any;sym Relation;genvar Relation Any;genvar Relation;gensym Relation Any Any;gensym Relation;double_string Relation Any Any;double_string Relation;remove_double_string Relation Any Any;remove_double_string Relation;str Relation Any Any;str Relation;double_quote Relation Any;double_quote Relation;single_quote Relation Any;single_quote Relation;has Any;get Any;set Any;custom_throw Relation Any Functor;custom_throw Relation;halt Any;debug_write Relation Any;debug_write Relation;debug Relation Any;debug Relation %Eq CWam;And CWam;Put Functor;Call Functor;Cur Functor;Lib Functor;Local Functor;Void Functor;Upvalue Functor Number;Const Functor Number;Val Functor Number;Var Functor;Var Functor String Number Functor;None Functor;Error Functor;TTable Functor;TList Functor;Func Functor;ObjGet2 Functor;ObjGet Functor;Id Functor;Str Functor String;Num Functor Number;Fact Functor;Rel Functor;Size Functor;Exclamation Functor;Declaration Functor;Once Functor;SoftCut Functor;Host Functor;Inequality Functor;Op Functor;Cond Functor;ObjData Functor;ObjPred Functor;Bracket Functor;Pred Functor;False Functor;True Functor Null;Or Functor Any Any;Mut Functor;Neq Functor Any Any;Eq Functor Any Any Any;F2 Functor;F1 Functor;F Functor;Tuple Functor;Pair Functor;Token Functor;Info Functor;Cons Functor;Stm Functor % module % generate_ gen2_generate_(_fname,_env,_env2,_f,_code,_upvals):-_upvals=[_generate],(call_cl(_generate,[_f,_code,_fname,_env,_env2,_module])). % generate_body_ gen2_generate_body_(_env,_env2,_f,_code,_upvals):-_upvals=[_generate_body],(call_cl(_generate_body,[_f,_code,_env,_env2])). % run gen2_run(_e,_e2,_module,_fname,_f2,_s2,_upvals):-_upvals=[_generate],(call_cl(_generate,[_f2,_s2,_fname,_e,_e2,_x]),_module = _x). % eval gen2_eval(_fname,_upvals):-_upvals=[_debug,_debug],(_module = _fname,call_cl(_debug,["--"]),ensure_loaded(_fname),atom_string(_X,_fname),call_cl(_debug,[_X]),call(_X,_)). % generate gen2_generate(_f,_code,_fname,_env,_env2,_module,_upvals):-_upvals=[_mutable,_each2,_list,_list,_notblank,_serialize_item,_list,_list,_list,_serialize_item,_list,_list,_list,_debug,_debug,_extract_type,_header,_gensym,_generate_stm,_set],(def(_fname),_module = _fname,call_cl(_set,[_env,"module",_fname,_env1]),call_cl(_generate_stm,[_env1,_env2,_f,_s]),!,call_cl(_gensym,["",_c]),call_cl(_header,[_s0]),!,(((get_(_env2,"export",T177),T177 = _x),(call_cl(_extract_type,[_env2,_x,_t2]),call_cl(_debug,['[|]'("t2",'[|]'(_x,'[|]'(_t2,[])))]));call_cl(_debug,['[|]'("no export",[])]))),get_(_list,"join",T180),_T179 = T180,get_(_list,"filter",T183),_T182 = T183,get_(_list,"map",T186),_T185 = T186,get_(_env2,"vars",T187),call_cl(_T185,[T187,_serialize_item,_T184]),call_cl(_T182,[_T184,clos([_serialize_item,_list,_list,_list,_debug,_debug,_extract_type,_header,_gensym,_generate_stm,_set],gen2_2),_T181]),call_cl(_T179,[_T181,";",_T178]),_info = "%"+_T178+"\n",get_(_list,"join",T190),_T189 = T190,get_(_list,"filter",T193),_T192 = T193,get_(_list,"map",T196),_T195 = T196,get_(_env2,"fcs",T197),call_cl(_T195,[T197,_serialize_item,_T194]),call_cl(_T192,[_T194,_notblank,_T191]),call_cl(_T189,[_T191,";",_T188]),_info2 = "%"+_T188+"\n",get_(_list,"join",T199),_T198 = T199,get_(_list,"map",T202),_T201 = T202,get_(_env2,"ids",T203),call_cl(_T201,[T203,_each2,_T200]),call_cl(_T198,[_T200,"",_s2]),get_(_mutable,"get",T205),_T204 = T205,call_cl(_T204,["debug",_db]),((_db = 1,_smain = "% main\n"+_module+"(X):-nb_setval(call,0),"+_s+""+".");(dif(_db,1),_smain = "% main\n"+_module+"(X):-"+_s+""+".")),_code = _info+_info2+"% module\n"+_s0+_s2+_smain). % 2 gen2_2(_s,_upvals):-_upvals=[_serialize_item,_list,_list,_list,_debug,_debug,_extract_type,_header,_gensym,_generate_stm,_set],(dif(_s,"")). % notblank gen2_notblank(_s,_upvals):-_upvals=[],(dif(_s,"")). % serialize_item gen2_serialize_item(_f,_s,_upvals):-_upvals=[_types,_debug,_debug],(call_cl(_debug,[_f]),((_f = fc_Var(_name,_,_type),call_cl(_debug,['[|]'(_name,'[|]'(_type,[]))]),get_(_types,"type_to_string",T176),_T175 = T176,call_cl(_T175,[_type,_T174]),_s = _name+" "+_T174);(dif(_f,fc_Var(_name,_,_type)),_s = ""))). % each3 gen2_each3(_e,_e2,_upvals):-_upvals=[_concat_if],(_e = '[|]'(_name,'[|]'(_n,'[|]'(_type,[]))),call_cl(_concat_if,[_sargs,"_upvals",_sargs3]),_s2 = "_upvals=["+_sargs2+"],",_e2 = "% "+_name+"\n"+_id+"("+_sargs3+"):-"+_s2+"("+_s+").\n"). % each2 gen2_each2(_e,_e2,_upvals):-_upvals=[_concat_if],(_e = '[|]'(_id,'[|]'(_name,'[|]'(_sargs,'[|]'(_sargs2,'[|]'(_s,[]))))),call_cl(_concat_if,[_sargs,"_upvals",_sargs3]),_s2 = "_upvals=["+_sargs2+"],",_e2 = "% "+_name+"\n"+_id+"("+_sargs3+"):-"+_s2+"("+_s+").\n"). % concat_if gen2_concat_if(_s1,_s,_s2,_upvals):-_upvals=[],(((_s1 = "",_s2 = _s);(dif(_s1,""),(_s = "",_s2 = _s1);(dif(_s,""),_s2 = _s1+","+_s)))). % generate_stm gen2_generate_stm(_env,_env2,_f,_code,_upvals):-_upvals=[_generate_body],(call_cl(_generate_body,[_f,_code,_env,_env2])). % header gen2_header(_s,_upvals):-_upvals=[],(_s = ""). % generate_body gen2_generate_body(_f,_code,_env,_env2,_upvals):-_upvals=[_custom_throw,_generate_fact,_debug,_debug,_term,_term,_debug,_debug,_Env,_Env,_debug,_genvar,_setup_pred,_extract_args,_debug,_debug,_generate_rel,_debug,_compare_types,_term,_term,_debug,_debug,_debug,_push_var,_extract_types,_set,_neg,_get_stm,_debug,_debug,_term,_term,_extract_args,_debug,_debug,_generate_cond_nest,_debug,_neg,_debug,_debug,_generate_cond_nest,_debug,_debug,_debug_write],(call_cl(_debug_write,["- "]),call_cl(_debug,[_f]),def(_f),!,((_f = fc_And(_a,_b,_line),call(gen2_generate_body(_a,_s1,_env,_temp),_upvals),!,call(gen2_generate_body(_b,_s2,_temp,_env2),_upvals),((_s1 = "true",_code = _s2);(dif(_s1,"true"),_code = _s1+","+_s2)));(dif(_f,fc_And(_a,_b,_line)),(_f = fc_And(_a,_b),call(gen2_generate_body(_a,_s1,_env,_temp),_upvals),call(gen2_generate_body(_b,_s2,_temp,_env2),_upvals),_code = _s1+","+_s2);(dif(_f,fc_And(_a,_b)),(_f = fc_Pair(_a,_b),call_cl(_debug,[_f]),call(gen2_generate_body(_a,_s1,_env,_temp),_upvals),call(gen2_generate_body(_b,_s2,_temp,_env2),_upvals),_code = "("+_s1+"),("+_s2+")");(dif(_f,fc_Pair(_a,_b)),(_f = fc_Or(_a,_b),call(gen2_generate_body(_a,_s1,_env,_env_a),_upvals),call(gen2_generate_body(_b,_s2,_env_a,_env2),_upvals),_code = _s1+";"+_s2);(dif(_f,fc_Or(_a,_b)),(_f = fc_Cond(_a,_b,_l0),call(gen2_generate_body(_a,_sa,_env,_env_a),_upvals),call(gen2_generate_body(_b,_sb,_env_a,_env_b),_upvals),_code1 = "("+_sa+","+_sb+")",_l = '[|]'(fc_Pair(_a,_b),_l0),call_cl(_generate_cond_nest,[_l,_code2,_env_b,_env2,[]]),str(_code2,T158),call_cl(_debug,['[|]'("c",'[|]'(T158,[]))]),_code = "("+_code2+")");(dif(_f,fc_Cond(_a,_b,_l0)),(_f = fc_Cond(_a,_b,_l0,_opts),get_(_env,"mode",T159),call_cl(_debug,['[|]'("",'[|]'(T159,[]))]),((_l0 = [],_opts = "if")->(call(gen2_generate_body(_b,_sb,_env,_env_b),_upvals),((get_(_env,"mode",T160),T160 = "fun",call(gen2_generate_body(_a,_sa,_env_b,_env2),_upvals),_code2 = "("+_sa+")->("+_sb+");(true)");(dif(T161,"fun"),(((call_cl(_neg,[_a,_na])),(true);throw("complex condition for if-else"))),call(gen2_generate_body(_na,_nsa,_env_b,_env2),_upvals),_code2 = "("+_nsa+");"+"("+_sb+")")));(_l = '[|]'(fc_Pair(_a,_b),_l0),call_cl(_debug,['[|]'("l",'[|]'(_l,[]))]),((get_(_env,"mode",T162),T162 = "fun",_opts1 = "choose");(dif(T163,"fun"),_opts1 = _opts)),call_cl(_generate_cond_nest,[_l,_code2,_env,_env2,_opts1]),str(_code2,T164),call_cl(_debug,['[|]'("c",'[|]'(T164,'[|]'(_opts,[])))]))),_code = "("+_code2+")");(dif(_f,fc_Cond(_a,_b,_l0,_opts)),(_f = fc_SoftCut(_a,_b,_l),call(gen2_generate_body(fc_Cond(_a,_b,_l,"!"),_code,_env,_env2),_upvals),call_cl(_debug,[fc_F1(_code)]));(dif(_f,fc_SoftCut(_a,_b,_l)),(_f = fc_Host(_host,_name,_args),(("cut" = _name,_code = "!",_env2 = _env);(dif("cut",_name),call_cl(_extract_args,[_args,_sargs,_env,_env2,_prefix]),((_args = [],_code = _prefix+_name);(dif(_args,[]),_code = _prefix+_name+"("+_sargs+")")))));(dif(_f,fc_Host(_host,_name,_args)),(_f = fc_Neq(_a,_b),call_cl(_term,[_a,_s1,_env,_env_a,_]),call_cl(_term,[_b,_s2,_env_a,_env_b,_]),_code = "dif("+_s1+","+_s2+")",_env2 = _env_b);(dif(_f,fc_Neq(_a,_b)),(_f = fc_ObjData(_obj,_name,_args,_info),call_cl(_debug,["-"]),throw(231));(dif(_f,fc_ObjData(_obj,_name,_args,_info)),(_f = fc_Stm(_name,_args,_body,_info),call_cl(_debug,['[|]'("stm",'[|]'(_f,[]))]),((_name = "once",((call_cl(_get_stm,[_env,_env2,_body,_prefix,_code0]))->(_code = _prefix+"once("+_code0+")");(throw("not valid code for once operator"))));(dif(_name,"once"),(_name = "not",(((call_cl(_neg,[_body,_na])),(call(gen2_generate_body(_na,_code,_env,_env2),_upvals));throw("complex statement for not operator"))));(dif(_name,"not"),writeln_(_name),throw("complex definition. not done")))));(dif(_f,fc_Stm(_name,_args,_body,_info)),(_f = fc_Rel(_name,_args,_f1,_mode),_id = fc_Id(_name,_t1),((_mode = "fun",_f2 = fc_Eq(fc_Id(_name,[]),fc_Rel(_id,_args,fc_And(_f1,fc_Host("c","cut",[]))),fc_Info(0,0)));(dif(_mode,"fun"),_f2 = fc_Eq(fc_Id(_name,[]),fc_Rel(_id,_args,_f1),fc_Info(0,0)))),call_cl(_set,[_env,"mode",_mode,X4]),call(gen2_generate_body(_f2,_code,X4,_env1),_upvals),call_cl(_extract_types,[_env1,_args,_type2]),_t2 = ["Relation"|_type2],call_cl(_push_var,[_env1,_env2,_name,_t2]),str(_code,T165),call_cl(_debug,['[|]'("->",'[|]'(_name,'[|]'(_sargs,'[|]'(T165,'[|]'(_t2,[])))))]),call_cl(_debug,[""]));(dif(_f,fc_Rel(_name,_args,_f1,_mode)),(_f = fc_Rel(_name,_args,_f1),get_(_env,"mode",T166),call_cl(_debug,['[|]'("",'[|]'(T166,[]))]),call(gen2_generate_body(fc_Rel(_name,_args,_f1,"rel"),_code,_env,_env2),_upvals));(dif(_f,fc_Rel(_name,_args,_f1)),(_f = fc_Eq(_a,_b,_info),call_cl(_term,[_a,_sa,_env,_env_a,_prefix1]),call_cl(_term,[_b,_sb,_env_a,_env_b,_prefix2]),call_cl(_compare_types,[_a,_b,_env_b,_env_c,_info]),_code = _prefix1+""+_prefix2+_sa+" = "+_sb,call_cl(_debug,['[|]'(_sa,'[|]'(_sb,[]))]),_env2 = _env_c);(dif(_f,fc_Eq(_a,_b,_info)),(_f = fc_Pred(_name,_args,_info),(((call_cl(_generate_rel,[_env,_env2,_f,_code])),(str(_code,T167),call_cl(_debug,[T167]));call_cl(_debug,["-"]),call_cl(_extract_args,[_args,_sargs,_env,_env1,_prefix]),call_cl(_setup_pred,[_env1,_env2,_name,_args,_sargs,_code1,_info]),_code = _prefix+_code1)));(dif(_f,fc_Pred(_name,_args,_info)),(_f = fc_ObjPred(_obj,_name,_args,_info),call_cl(_genvar,[_o]),_o = fc_Id(_name2,_),((_type = '[|]'("Object",_),call(gen2_generate_body(fc_And(fc_Eq(_o,fc_ObjGet(_obj,_name),_info),fc_Pred(_name2,_args,_info)),_code,_env,_env2),_upvals));(dif(_type,'[|]'("Object",_)),call(gen2_generate_body(fc_And(fc_Eq(_o,fc_ObjGet(_obj,_name),_info),fc_Pred(_name2,_args,_info)),_code,_env,_env2),_upvals))));(dif(_f,fc_ObjPred(_obj,_name,_args,_info)),(_f = fc_Declaration(_name,_type),call_cl(_debug,["declaration"]),((_type = '[|]'("Relation",_t),_t0 = '[|]'("Relation",_t));(dif(_type,'[|]'("Relation",_t)),_t0 = _type)),get_(_Env,"push",T169),_T168 = T169,call_cl(_T168,[_env,fc_Var(_name,"out",_t0),_env1]),_id = "_"+_name,_code = "true",_env2 = _env1,get_(_Env,"vars",T172),_T171 = T172,call_cl(_T171,[_env2,_T170]),call_cl(_debug,[_T170]));(dif(_f,fc_Declaration(_name,_type)),(_f = fc([],"True"),_env2 = _env,_code = "true",call_cl(_debug,[_code]));(dif(_f,fc([],"True")),(_f = fc([],"False"),_env2 = _env,_code = "false",((dif(T173,"fun"));(throw("boolean keyword outside of a conditional"))));(dif(_f,fc([],"False")),(_f = fc_Inequality(_a,_b,_op,_info),call_cl(_term,[_a,_sa,_env,_env1,_prefix1]),call_cl(_term,[_b,_sb,_env1,_env3,_prefix2]),_l = '[|]'(_a,'[|]'(_b,[])),((_op = "!=",_fn = "neq",throw("compiler error"));(dif(_op,"!="),(_op = "<",_fn = "lt");(dif(_op,"<"),(_op = "<=",_fn = "le");(dif(_op,"<="),(_op = ">",_fn = "gt");(dif(_op,">"),(_op = ">="),(_fn = "ge")))))),call_cl(_debug,['[|]'("=ineq",'[|]'(_prefix1,'[|]'(_prefix2,[])))]),_code = _prefix1+_prefix2+""+""+_fn+"("+_sa+","+_sb+")",call_cl(_debug,[_code]),_env2 = _env3);(dif(_f,fc_Inequality(_a,_b,_op,_info)),(_f = fc_Fact(_name,_args,_info),call_cl(_generate_fact,[_env,_env2,_f,_code]));(dif(_f,fc_Fact(_name,_args,_info)),writeln_(_f),writeln_(""),call_cl(_custom_throw,["cannot compile code (could not find the above term)",_info])))))))))))))))))))))))). % get_stm gen2_get_stm(_env,_env2,_f,_prefix,_code1,_upvals):-_upvals=[_setup_pred,_extract_args],(((_f = fc_Pred(_name,_args,_info),call_cl(_extract_args,[_args,_sargs,_env,_env1,_prefix]),call_cl(_setup_pred,[_env1,_env2,_name,_args,_sargs,_code1,_info]));(dif(_f,fc_Pred(_name,_args,_info)),false))). % compare_types gen2_compare_types(_a,_b,_env,_env2,_info,_upvals):-_upvals=[_custom_throw,_io,_specialize_type,_debug,_types,_extract_type,_extract_type],(call_cl(_extract_type,[_env,_a,_ta]),call_cl(_extract_type,[_env,_b,_tb]),((get_(_types,"compare_types",T155),_T154 = T155,call_cl(_T154,[_ta,_tb]))->(call_cl(_debug,['[|]'("type",'[|]'(_ta,'[|]'(_tb,[])))]),call_cl(_specialize_type,[_env,_a,_ta,_tb,_env2]));(get_(_io,"writeln",T157),_T156 = T157,call_cl(_T156,['[|]'("type",'[|]'(_ta,'[|]'(_tb,[])))]),call_cl(_custom_throw,["cannot unify types",_info])))). % specialize_type gen2_specialize_type(_env,_a,_ta,_tb,_env2,_upvals):-_upvals=[_io,_env_update,_types],(((_a = fc_Id(_name,_),(((get_(_types,"strict_type",T151),_T150 = T151,call_cl(_T150,[_ta,_tb,_T149]),call_cl(_env_update,[_env,_name,_T149,_env2])),(true);get_(_io,"writeln",T153),_T152 = T153,call_cl(_T152,['[|]'(_ta,'[|]'(_tb,[]))]),throw("no strict"))));(dif(_a,fc_Id(_name,_)),_env2 = _env))). % extract_type gen2_extract_type(_env,_f,_type,_upvals):-_upvals=[_extract_types,_debug,_debug,_to_table_type,_table,_extract_type_id],(((_f = fc_Num(_s),_type = '[|]'("Number",[]));(dif(_f,fc_Num(_s)),(_f = fc_Str(_),_type = '[|]'("String",[]));(dif(_f,fc_Str(_)),(_f = fc_Id(_name,_t1),call_cl(_extract_type_id,[_env,_f,_type,_info]));(dif(_f,fc_Id(_name,_t1)),(_f = fc_TTable(_args),_type = '[|]'("Table",_t2),get_(_table,"new",T148),_T147 = T148,call_cl(_T147,[_t]),call_cl(_to_table_type,[_env,_args,_t,_t2]),call_cl(_debug,['[|]'("dict",'[|]'(_type,[]))]));(dif(_f,fc_TTable(_args)),(_f = fc_TTable(_,_),_type = '[|]'("Table",[]));(dif(_f,fc_TTable(_,_)),(_f = fc_Rel(_,_,_),_type = '[|]'("Relation",[]));(dif(_f,fc_Rel(_,_,_)),(_f = fc_Rel(_args,_),call_cl(_debug,[_f]),call_cl(_extract_types,[_env,_args,_t]),_type = '[|]'("Relation",_t));(dif(_f,fc_Rel(_args,_)),_type = '[|]'("Any",[])))))))))). % to_table_type gen2_to_table_type(_env,_l,_t,_t2,_upvals):-_upvals=[_debug,_set,_extract_type,_remove_double_string,_debug],(((_l = fc_And(_a,_b),call_cl(_debug,['[|]'("dict",'[|]'(_l,'[|]'(_env2,[])))]),throw("-"));(dif(_l,fc_And(_a,_b)),(_l = fc_And(_a,_b,_),call(gen2_to_table_type(_env,_a,_t,_t0),_upvals),call(gen2_to_table_type(_env,_b,_t0,_t2),_upvals));(dif(_l,fc_And(_a,_b,_)),(_l = fc_Eq(_a,_b,_info),((_a = fc_Id(_sa,_),true);(dif(_a,fc_Id(_sa,_)),(_a = fc_Str(_s1),call_cl(_remove_double_string,[_s1,_sa]));(dif(_a,fc_Str(_s1)),_sa = ""))),call_cl(_extract_type,[_env,_b,_tb]),call_cl(_set,[_t,_sa,_tb,_t2]),call_cl(_debug,['[|]'(_sa,'[|]'(_tb,[]))]));(dif(_l,fc_Eq(_a,_b,_info)),_t2 = _t))))). % set_type gen2_set_type(_env,_env2,_name,_t,_upvals):-_upvals=[_env_update],(call_cl(_env_update,[_env,_name,_t,_env2])). % env_update gen2_env_update(_env,_name,_tc,_env2,_upvals):-_upvals=[_Env,_debug,_Env,_Env,_debug,_list,_Env,_logic],(_f2 = fc_Var(_name,_n2,_tc),_f = fc_Var(_name,_n2,_t1),get_(_logic,"instantiated",T136),_T135 = T136,call_cl(_T135,[_name]),get_(_Env,"vars",T138),_T137 = T138,call_cl(_T137,[_env,_l]),(((get_(_list,"has",T140),_T139 = T140,call_cl(_T139,[_l,_f])),(((_tc = _t1,_env2 = _env);(dif(_tc,_t1),call_cl(_debug,['[|]'("update",'[|]'(_t1,'[|]'(_tc,[])))]),get_(_Env,"remove",T142),_T141 = T142,call_cl(_T141,[_env,_n2,_env1]),get_(_Env,"push",T144),_T143 = T144,call_cl(_T143,[_env1,_f2,_env2]))));call_cl(_debug,['[|]'("-",'[|]'(_f,[]))]),((_n2 = "in",true);(dif(_n2,"in"),true)),_tc = _t1,get_(_Env,"push",T146),_T145 = T146,call_cl(_T145,[_env,_f,_env2])))). % generate_rel gen2_generate_rel(_env,_env2,_f,_code,_upvals):-_upvals=[_extract_args,_set,_debug,_list,_extract_type,_term,_debug,_string,_string,_Env,_term],(_f = fc_Pred(_name,_args,_info),((_name = "require")->(_args = '[|]'(_a,'[|]'(_b,[])),call_cl(_term,[_a,_s0,_env,_env_a,_]),_b = fc_Id(_sb,_t2),_s2 = "_"+_sb,get_(_env,"module",T121),_s = T121+"_"+_sb,get_(_Env,"push",T123),_T122 = T123,call_cl(_T122,[_env_a,fc_Var(_sb,"in",_t2),_env2]),!,get_(_string,"size",T125),_T124 = T125,str(_s0,T126),call_cl(_T124,[T126,_n]),get_(_string,"slice",T128),_T127 = T128,str(_s0,T129),call_cl(_T127,[T129,1,_n-1,_sa]),_module = _sa,_code = "creq(\""+_sa+"\","+"_"+_sb+")",str(_code,T130),call_cl(_debug,[T130]));((_name = "export")->(_args = '[|]'(_a,[]),call_cl(_term,[_a,_s1,_env,_env_a,_prefix_]),_code = "X="+_s1+"",call_cl(_extract_type,[_env,_a,_t]),(((_a = fc_Id(_name2,_),get_(_list,"has",T132),_T131 = T132,get_(_env,"vars",T133),call_cl(_T131,[T133,fc_Var(_name2,_n2,_t2)])),(true);get_(_env,"vars",T134),call_cl(_debug,[T134]))),call_cl(_set,[_env_a,"export",_a,_env2]));((_name = "print")->(call_cl(_extract_args,[_args,_sargs,_env,_env2,_prefix]),_code = _prefix+"writeln_("+_sargs+")");(false))))). % generate_fact gen2_generate_fact(_env,_env2,_f,_code,_upvals):-_upvals=[_generate_body,_Env,_table,_Env,_Env,_debug,_debug,_list,_debug],(_f = fc_Fact(_name,_args,_info),((_name = "functor",_code = "true",_c = fc_Var(_name2,0,_type),_args = '[|]'(fc_Id(_name2,_),'[|]'(fc_Id(_arg1,_arg2),[])),call_cl(_debug,[fc_F(_arg1,_arg2)]),((_arg2 = [],((_arg1 = "_",_type = '[|]'("Functor",[]));(dif(_arg1,"_"),_type = '[|]'(_arg1,[]))));(dif(_arg2,[]),get_(_list,"concat",T112),_T111 = T112,call_cl(_T111,[_arg2,'[|]'('[|]'(_arg1,[]),[]),_type]),call_cl(_debug,[_type]))),_type = [_first_type|_],call_cl(_debug,['[|]'("fc",'[|]'(_first_type,'[|]'(_arg1,'[|]'(_arg2,'[|]'(_type,[])))))]),get_(_Env,"push_on",T114),_T113 = T114,call_cl(_T113,[_env,"fcs",_c,_env1]),((dif(_first_type,"Functor"),get_(_Env,"get",T116),_T115 = T116,call_cl(_T115,[_env,"types",_o]),get_(_table,"set",T118),_T117 = T118,call_cl(_T117,[_o,_first_type,"Functor",_o2]),get_(_Env,"set",T120),_T119 = T120,call_cl(_T119,[_env1,"types",_o2,_env2]));(_first_type = "Functor",_env1 = _env2)));(dif(_name,"functor"),("cut" = _name,_code = "!",_env2 = _env);(dif("cut",_name),(_name = "throw",_f1 = fc_Host("c","throw",_args),call_cl(_generate_body,[_f1,_code,_env,_env2]),_args = '[|]'(_c,_));(dif(_name,"throw"),false))))). % extract_type_information gen2_extract_type_information(_fname,_x,_upvals):-_upvals=[_list,_string,_io,_io,_io,_io,_io,_io],(get_(_io,"open",T97),_T96 = T97,call_cl(_T96,[_fname,"read",_f]),get_(_io,"fileReadChar",T99),_T98 = T99,call_cl(_T98,[_f,_c]),((dif(_c,"%"),get_(_io,"writeln",T101),_T100 = T101,call_cl(_T100,["Warning: no type information on file "+_fname]),_x = []);(_c = "%",get_(_io,"fileReadLine",T103),_T102 = T103,call_cl(_T102,[_f,_line]),((_line = "",get_(_io,"writeln",T105),_T104 = T105,call_cl(_T104,["Warning: blank type information on file "+_fname]),_x = []);(dif(_line,""),get_(_io,"close",T107),_T106 = T107,call_cl(_T106,[_f]),get_(_string,"split",T108),_split = T108,once(call_cl(_split,[_line,";",_l])),get_(_list,"map",T110),_T109 = T110,call_cl(_T109,[_l,_extract,_l2]),_x = _l2))))). % term gen2_term(_f,_s2,_env,_env2,_prefix,_upvals):-_upvals=[_term_,_debug,_extract_type,_setup_var,_get_type,_sym,_generate_body,_list,_genvar,_debug,_debug,_to_table,_set,_set,_table,_gensym,_gensym,_gensym,_filter,_debug,_to_list,_lambda6,_pushid,_set,_extract_args,_debug,_make_rel,_debug,_debug,_gensym,_setup_var,_sym,_setup_var,_check_type,_get_type,_sym,_func,_setup_var,_debug,_is_functor,_debug,_debug_write],(call_cl(_debug_write,[":"]),call_cl(_debug,[_f]),def(_env),((_f = fc_Id(_name,_))->(_prefix = "",(((_name = "Cons"),(_s2 = "[]",_env = _env2);((_name = "_"),(_s2 = "_",_env = _env2);((call_cl(_is_functor,[_name,_env])),(call_cl(_debug,[";functor"]),_s2 = "fc([],\""+_name+"\")",_env2 = _env);call_cl(_setup_var,[_env,_env2,_name,_s2]))))));((_f = fc_Func(_name,_args,_info))->(call_cl(_func,[_f,_s2,_env,_env2,_prefix]));((_f = fc_ObjGet(_a,_b))->(call_cl(_sym,[_s2]),(((call_cl(_get_type,[_env,_a,_t])),((((call_cl(_check_type,[_env,_b,_t])),(true);writeln_(_t),str("property "+_b+" not found in "+_a,T88),throw(T88))));true)),call_cl(_setup_var,[_env,_env2,_a,_sa]),_prefix = "get_("+_sa+","+"\""+_b+"\","+_s2+"),");((_f = fc_ObjGet2(_a,_b))->(call(gen2_term(_b,_sb,_env,_,_),_upvals),call_cl(_sym,[_s2]),call_cl(_setup_var,[_env,_env2,_a,_sa]),_prefix = "get_("+_sa+","+""+_sb+","+_s2+"),");((_f = fc_Rel(_args,_body))->(call_cl(_gensym,["",_n]),_id = fc_Id(_n,[]),call(gen2_term(fc_Rel(_id,_args,_body),_s2,_env,_env2,_prefix),_upvals));((_f = fc_Rel(_id,_args,_body))->(_id = fc_Id(_name,_),call_cl(_debug,['[|]'(_id,'[|]'(_name,[]))]),get_(_env,"module",T89),_id2 = T89+"_"+_name,call_cl(_debug,[_id2]),call_cl(_make_rel,[_env,_fn,_f,_sargs,_s0,_id2]),call_cl(_debug,['[|]'("bind",'[|]'(_id,'[|]'(_id2,'[|]'(_sargs2,'[|]'(_s0,[])))))]),get_(_fn,"upvals",T90),call_cl(_extract_args,[T90,_sargs2,_env,_,_]),get_(_fn,"ids",T91),call_cl(_set,[_env,"ids",T91,_env1]),call_cl(_pushid,[_env1,'[|]'(_id2,'[|]'(_name,'[|]'(_sargs,'[|]'(_sargs2,'[|]'(_s0,[]))))),_env2]),call_cl(_lambda6,["["+_sargs2+"]",_id2,_s2]),_prefix = "");((_f = fc_TList(_args))->(call_cl(_to_list,[_args,_sargs,_env,_env2,_prefix]),_s2 = _sargs);((_f = fc_TTable(_args))->(call_cl(_debug,[_f]),call_cl(_filter,[_args,_args2]),((_args2 = fc([],"True"),call_cl(_gensym,["T",_s2]),_prefix = "new("+_s2+"),",_env = _env2);(dif(_args2,fc([],"True")),call_cl(_gensym,["T",_c]),call_cl(_gensym,["T",_s2]),get_(_table,"new",T93),_T92 = T93,call_cl(_T92,[_t]),call_cl(_set,[_env,"mode","obj",X1]),call_cl(_set,[X1,"this",_s2,X2]),call_cl(_to_table,[X2,_env1,_args2,_f2,_c,_s2,_t,_t2]),call_cl(_debug,[_t2]),call_cl(_debug,['[|]'("s",'[|]'(_f2,[]))]),_env2 = _env1,_prefix = "new("+_c+"),"+_f2)));((_f = fc_ObjPred(_obj,_name,_args,_info))->(call_cl(_genvar,[_o]),get_(_list,"concat",T95),_T94 = T95,call_cl(_T94,[_args,'[|]'(_o,[]),_args2]),call_cl(_generate_body,[fc_ObjPred(_obj,_name,_args2,_info),_prefix1,_env,_env2]),_o = fc_Id(_s1,_),_s2 = "_"+_s1,_prefix = _prefix1+",");((_f = fc_ObjGet(_a,_b))->(call_cl(_sym,[_s2]),throw(22),call_cl(_get_type,[_a,_t]),call_cl(_setup_var,[_env,_env2,_a,X3]),_prefix = "get_("+X3+","+"\""+_b+"\","+_s2+"),");((_f = fc_Op(_a,_b,_op,_info))->(call_cl(_extract_type,[_env,_a,_ta]),call(gen2_term(_a,_sa,_env,_env1,_prefix1),_upvals),call(gen2_term(_b,_sb,_env1,_env3,_prefix2),_upvals),call_cl(_debug,['[|]'(_ta,'[|]'(_op,'[|]'(_sa,'[|]'(_sb,[]))))]),_prefix = _prefix1+_prefix2,_s2 = _sa+_op+_sb,_env2 = _env3);((call_cl(_term_,[_f,_s2,_env,_env2]))->(_prefix = "");(writeln_(_f),throw("term not recognized"))))))))))))))). % pushid gen2_pushid(_env,_e,_env2,_upvals):-_upvals=[_set,_list],((((get_(_env,"ids",T85),T85 = _t),(get_(_list,"push",T87),_T86 = T87,call_cl(_T86,[_t,_e,_t1]),call_cl(_set,[_env,"ids",_t1,_env2]));throw("no ids")))). % check_type gen2_check_type(_env,_name,_type,_upvals):-_upvals=[_debug,_get_type,_debug],((((_type = [];_type = '[|]'("Any",[])),(true);_type = '[|]'("Table",_t),(((_t = []),(true);((get_(_t,_name,T84),T84 = _t0),(call_cl(_debug,['[|]'("chk",'[|]'(_name,'[|]'(_t,[])))]),call_cl(_get_type,[_env,_name,_t2]),call_cl(_debug,['[|]'("obj-get",'[|]'(_t0,'[|]'(_t2,[])))]),true);false)))))). % get_type gen2_get_type(_env,_name,_t,_upvals):-_upvals=[_has],((((get_(_env,"vars",T83),call_cl(_has,[T83,fc_Var(_name,_,_t)])),(true);_t = '[|]'("Table",[])))). % is_num gen2_is_num(_ta,_upvals):-_upvals=[],(_ta = '[|]'("Number",_);_ta = '[|]'("Integer",_);_ta = '[|]'("Real",_)). % assert gen2_assert(_f,_l,_upvals):-_upvals=[_logic],((((get_(_logic,"apply",T82),_T81 = T82,call_cl(_T81,[_f,_l])),(true);throw("assert")))). % make_rel gen2_make_rel(_env,_fn,_f,_sargs,_body,_id2,_upvals):-_upvals=[_debug,_extract_args,_generate_body,_Env,_debug,_set,_push_types,_debug,_env_make],(_f = fc_Rel(_id,_args,_code),call_cl(_env_make,[_env1,_env]),_args2 = _args,call_cl(_debug,["-setup"]),call_cl(_push_types,[_env1,_env_fn2,_args2,_type]),_id = fc_Id(_name,_type2),call_cl(_set,[_env_fn2,"rec",_id2,_env_fn3]),call_cl(_debug,['[|]'("make-rec",'[|]'(_id2,'[|]'(_id,[])))]),get_(_Env,"push",T80),_T79 = T80,call_cl(_T79,[_env_fn3,fc_Var(_name,"rec",'[|]'("Relation",[])),_env_fn]),call_cl(_generate_body,[_code,_body,_env_fn,_fn]),call_cl(_extract_args,[_args2,_sargs,_env1,_,_prefix]),call_cl(_debug,["-"])). % term_ gen2_term_(_f,_s2,_env,_env2,_upvals):-_upvals=[_term,_double_string],(((_f = fc_Str(_s),_env = _env2,call_cl(_double_string,[_s,_s2]));(dif(_f,fc_Str(_s)),(_f = fc_Host(_a,_s),_env = _env2,_s2 = _s);(dif(_f,fc_Host(_a,_s)),(_f = fc_Num(_s),_env = _env2,_s2 = _s);(dif(_f,fc_Num(_s)),(_f = fc_Size(_a,_info),call_cl(_term,[_a,_sa,_env,_env2,_]),_s2 = _sa+".length");(dif(_f,fc_Size(_a,_info)),writeln_(_f),throw("term not recognized"))))))). % to_list gen2_to_list(_l,_s,_env,_env2,_prefix,_upvals):-_upvals=[_string,_term,_string,_term,_term],(((_l = [_a|[fc_Tuple(_l2)|[]]],call_cl(_term,[_a,_sa,_env,_env1,_prefix1]),call_cl(_term,[_l2,_sb,_env1,_env2,_prefix2]),get_(_string,"code",T76),_T75 = T76,call_cl(_T75,[_c,39]),_symbol = _c+"[|]"+_c,_s = ""+_symbol+"("+_sa+","+_sb+")",_prefix = _prefix1+_prefix2);(dif(_l,[_a|[fc_Tuple(_l2)|[]]]),(_l = [_a|_tail],call_cl(_term,[_a,_sa,_env,_env1,_prefix1]),call(gen2_to_list(_tail,_sb,_env1,_env2,_prefix2),_upvals),_prefix = _prefix1+_prefix2,get_(_string,"code",T78),_T77 = T78,call_cl(_T77,[_c,39]),_symbol = _c+"[|]"+_c,_s = ""+_symbol+"("+_sa+","+_sb+")");(dif(_l,[_a|_tail]),_l = [],_s = "[]",_env2 = _env,_prefix = "")))). % to_table gen2_to_table(_env,_env2,_l,_f,_c,_c2,_t,_t2,_upvals):-_upvals=[_debug,_set,_extract_type,_remove_double_string,_debug,_table_eq,_debug,_debug,_gensym],(((_l = fc_And(_a,_b),call_cl(_gensym,["T",_c_]),call(gen2_to_table(_env,_temp,_a,_f1,_c,_c_,_t,_t0),_upvals),call(gen2_to_table(_temp,_env2,_b,_f2,_c_,_c2,_t0,_t2),_upvals),call_cl(_debug,['[|]'(",",'[|]'(_a,'[|]'(_f1,'[|]'(_b,'[|]'(_f2,[])))))]),_f = _f1+""+_f2);(dif(_l,fc_And(_a,_b)),(_l = fc_And(_a,_b,_),throw("-"));(dif(_l,fc_And(_a,_b,_)),(_l = fc_Eq(_a,_b,_info),call_cl(_debug,['[|]'("eq1",'[|]'(_a,'[|]'(_b,[])))]),call_cl(_table_eq,[_env,_env2,_l,_f,_c,_c2]),call_cl(_debug,['[|]'("eq",'[|]'(_f,[]))]),def(_f),((_a = fc_Id(_sa,_),true);(dif(_a,fc_Id(_sa,_)),(_a = fc_Str(_s1),call_cl(_remove_double_string,[_s1,_sa]));(dif(_a,fc_Str(_s1)),_sa = ""))),call_cl(_extract_type,[_env,_b,_tb]),call_cl(_set,[_t,_sa,_tb,_t2]));(dif(_l,fc_Eq(_a,_b,_info)),(_l = fc([],"True"),_f = "true,",_env2 = _env,_c2 = _c,_t2 = _t);(dif(_l,fc([],"True")),(_f = fc_Host(_,_a,_b),_env = _env2,_s2 = _s,_t2 = _t);(dif(_f,fc_Host(_,_a,_b)),(_l = fc_Rel(_name,_args,_f1),throw("-"));(dif(_l,fc_Rel(_name,_args,_f1)),call_cl(_debug,[_l]),throw("cannot convert to table"))))))))). % table_eq gen2_table_eq(_env,_env2,_l,_f,_c,_c2,_upvals):-_upvals=[_debug,_term,_term],(_l = fc_Eq(_a,_b,_info),call_cl(_term,[_a,_sa,_env,_env_a,_prefix1]),call_cl(_term,[_b,_sb,_env_a,_env_b,_prefix2]),((_a = fc_Id(_name,_),call_cl(_debug,['[|]'(_sa,'[|]'(_sb,'[|]'(_c,'[|]'(_c2,[]))))]),_f = "set_("+_c+",\""+_name+"\","+_sb+","+_c2+"),");(dif(_a,fc_Id(_name,_)),_f = "set_("+_c+","+_sa+","+_sb+","+_c2+"),")),_env2 = _env_b). % filter gen2_filter(_l,_f,_upvals):-_upvals=[],(((_l = fc_And(_a,_b),call(gen2_filter(_a,_f1),_upvals),call(gen2_filter(_b,_f2),_upvals),((_a = fc([],"True"),_f = _f2);(dif(_a,fc([],"True")),(_b = fc([],"True"),_f = _f1);(dif(_b,fc([],"True")),_f = fc_And(_f1,_f2)))));(dif(_l,fc_And(_a,_b)),(_l = fc_And(_a,_b,_),call(gen2_filter(fc_And(_a,_b),_f),_upvals));(dif(_l,fc_And(_a,_b,_)),(_l = fc_Rel(_name,_args,_f1),_f = fc_Eq(fc_Id(_name,[]),fc_Rel(_args,_f1),_));(dif(_l,fc_Rel(_name,_args,_f1)),_f = _l))))). % func gen2_func(_f,_s2,_env,_env2,_prefix,_upvals):-_upvals=[_debug,_setup_pred,_debug,_gensym,_extract_args,_gensym,_term,_debug,_gensym,_term,_debug,_gensym,_term,_debug,_debug,_extract_args,_is_functor,_listify],(_f = fc_Func(_name,_args,_info),(((_name = "Cons"),(call_cl(_listify,[_args,_s2,_prefix,_env,_env2]));((call_cl(_is_functor,[_name,_env])),(call_cl(_extract_args,[_args,_sargs,_env,_env2,_prefix]),call_cl(_debug,[_name]),_s2 = "fc_"+_name+"("+_sargs+")",call_cl(_debug,[_s2]));((_name = "int"),(_args = '[|]'(_h,[]),call_cl(_term,[_h,_s,_env,_env2,_prefix1]),call_cl(_gensym,["X",_s2]),_prefix = "int("+_s+","+_s2+"),",call_cl(_debug,['[|]'("-",'[|]'(_prefix,'[|]'(_c,[])))]));((_name = "num";_name = "real"),(_args = '[|]'(_h,[]),call_cl(_term,[_h,_s,_env,_env2,_prefix1]),call_cl(_gensym,["X",_s2]),_prefix = "{"+_s2+" = "+_s+"},",call_cl(_debug,['[|]'("-",'[|]'(_prefix,'[|]'(_s2,[])))]));((_name = "str"),(_args = '[|]'(_h,[]),call_cl(_term,[_h,_s,_env,_env2,_prefix1]),call_cl(_gensym,["T",_c]),_prefix = "str("+_s+","+_c+"),",_s2 = _c);!,call_cl(_extract_args,[_args,_sargs,_env,_env1,_prefix1]),call_cl(_gensym,["X",_c]),call_cl(_debug,['[|]'("fn",'[|]'(_name,'[|]'(_sargs,[])))]),_s2 = _c,((_sargs = "",_s1 = _c);(dif(_sargs,""),_s1 = _sargs+","+_c)),call_cl(_setup_pred,[_env1,_env2,_name,_args,_s1,_s,_info]),call_cl(_debug,['[|]'("p-",'[|]'(_s,'[|]'(_sargs,'[|]'(_s2,[]))))]),_prefix = _prefix1+_s+",",def(_env)))))))). % listify gen2_listify(_l,_s2,_prefix,_env,_env2,_upvals):-_upvals=[_term,_term],(((_l = '[|]'(_a,'[|]'(_b,[])),call_cl(_term,[_a,_sa,_env,_env1,_c1]),call_cl(_term,[_b,_sb,_env1,_env2,_c2]),_s2 = "["+_sa+"|"+_sb+"]",_prefix = _c1+_c2);(dif(_l,'[|]'(_a,'[|]'(_b,[]))),throw("incorrect number of parameters for Cons")))). % setup_pred gen2_setup_pred(_env,_env2,_name,_args,_sargs,_code,_info,_upvals):-_upvals=[_custom_throw,_lambda5,_Env,_debug,_Env,_lambda5,_setup_var,_debug,_apply,_debug,_compare_relation,_list,_debug,_debug],(_fc = fc_Var(_name,_obj,_type),call_cl(_debug,["[-setup=call]"]),get_(_env,"vars",T66),call_cl(_debug,[T66]),(((get_(_list,"find",T68),_T67 = T68,get_(_env,"vars",T69),call_cl(_T67,[T69,_fc,_])),(call_cl(_compare_relation,[fc_Pair(_name,_type),_args,_env,_env2,_info]),((_obj = "rec",call_cl(_debug,['[|]'("call-rec",'[|]'(_id,[]))]),get_(_env,"rec",T70),call_cl(_apply,[T70,_sargs,_code]));(dif(_obj,"rec"),call_cl(_debug,['[|]'("call",'[|]'(_name,[]))]),call_cl(_setup_var,[_env,_,_name,_name2]),call_cl(_lambda5,[_name,_sargs,_code]))));((get_(_Env,"prevs",T72),_T71 = T72,call_cl(_T71,[_env,_name,_fc])),(call_cl(_debug,['[|]'("prev-var2=rel",'[|]'(_name,'[|]'(_fc,'[|]'(_id,[]))))]),get_(_Env,"push_on",T74),_T73 = T74,call_cl(_T73,[_env,"upvals",fc_Id(_name,_type),_env2]),call_cl(_lambda5,[_name,_sargs,_code]));writeln_(_name),call_cl(_custom_throw,["calling unknown relation "+_name,_info]))))). % apply gen2_apply(_name,_sargs,_s,_upvals):-_upvals=[],(((_sargs = "",_s = "call("+_name+",_upvals)");(dif(_sargs,""),_s = "call("+_name+"("+_sargs+"),_upvals)"))). % lambda5 gen2_lambda5(_name,_sargs,_s2,_upvals):-_upvals=[_lambda4,_mutable],(get_(_mutable,"get",T65),_T64 = T65,call_cl(_T64,["debug",_x]),((_x = 1,call_cl(_lambda4,[_name,_sargs,_s2]));(dif(_x,1),_s2 = "call_cl("+"_"+_name+",["+_sargs+"]"+""+")"))). % lambda4 gen2_lambda4(_name,_sargs,_s2,_upvals):-_upvals=[],(_s2 = "call_db("+"_"+_name+",["+_sargs+"],["+_name+"])"). % lambda6 gen2_lambda6(_sargs,_s0,_s2,_upvals):-_upvals=[],(_s2 = "clos("+_sargs+","+""+_s0+")"). % extract_args gen2_extract_args(_l,_s,_env,_env2,_prefix,_upvals):-_upvals=[_string,_term,_term],(((_l = [_f1|[]])->(call_cl(_term,[_f1,_s,_env,_env2,_prefix]));((_l = [_f1|_tail])->(call_cl(_term,[_f1,_s1,_env,_env_a,_prefix1]),call(gen2_extract_args(_tail,_s2,_env_a,_env2,_prefix2),_upvals),def(_prefix2),def(_prefix1),get_(_string,"concat",T63),_T62 = T63,call_cl(_T62,[_prefix1,_prefix2,_prefix]),_s = _s1+","+_s2);(_l = [],_s = "",_prefix = "",_env2 = _env)))). % compare_relation gen2_compare_relation(_f,_args,_env,_env2,_info,_upvals):-_upvals=[_custom_throw,_io,_io,_io,_debug,_debug,_types,_eq2,_debug,_debug,_extract_type_args],(!,_f = fc_Pair(_name,_t1),call_cl(_extract_type_args,[_args,_targs,_env]),_env = _env2,_t2 = ["Relation"|_targs],call_cl(_debug,['[|]'("frel",'[|]'(_f,'[|]'(_t1,'[|]'(_t2,[]))))]),(((_t1 = '[|]'("void",_)),(call_cl(_debug,['[|]'("true1",'[|]'(_t1,'[|]'(_t2,[])))]),call_cl(_eq2,[_t1,_t2]),true);((get_(_types,"compare_types",T55),_T54 = T55,call_cl(_T54,[_t1,_t2])),(call_cl(_debug,['[|]'("true",'[|]'(_t1,[]))]),dif(_t1,'[|]'("void",_)),call_cl(_debug,['[|]'("true",'[|]'("-",[]))]));get_(_io,"writeln",T57),_T56 = T57,call_cl(_T56,['[|]'("types",'[|]'(_args,[]))]),get_(_io,"writeln",T59),_T58 = T59,call_cl(_T58,[_t1]),get_(_io,"writeln",T61),_T60 = T61,call_cl(_T60,[_t2]),_msg = "calling relation "+_name+" with wrong type",call_cl(_custom_throw,[_msg,_info]))))). % eq2 gen2_eq2(_t1,_t2,_upvals):-_upvals=[_eq3,_debug],(_n1 = _t1.length,_n2 = _t2.length,call_cl(_debug,['[|]'(_n1,'[|]'(_n2,[]))]),call_cl(_eq3,[_n1,_n2])). % eq3 gen2_eq3(_n1,_n2,_upvals):-_upvals=[],((((true),(_n1 = _n2);_n1 = 1))). % setup_var gen2_setup_var(_env,_env2,_name,_s2,_upvals):-_upvals=[_setup_var2,_debug,_list,_Env],(get_(_Env,"vars",T50),_T49 = T50,call_cl(_T49,[_env,_vars]),_fc = fc_Var(_name,_n,_tc,_id),(((get_(_list,"find",T52),_T51 = T52,get_(_env,"vars",T53),call_cl(_T51,[T53,_fc,_])),(_env2 = _env,_s2 = ""+_id,call_cl(_debug,['[|]'("alias",'[|]'(_s2,[]))]));call_cl(_setup_var2,[_env,_env2,_name,_s2])))). % setup_var2 gen2_setup_var2(_env,_env2,_name,_s2,_upvals):-_upvals=[_Env,_Env,_debug,_Env,_var2,_list],(_fc = fc_Var(_name,_n,_tc),(((get_(_list,"find",T41),_T40 = T41,get_(_env,"vars",T42),call_cl(_T40,[T42,_fc,_])),(call_cl(_var2,[_env,_env2,_fc,_s2]));((get_(_Env,"prevs",T44),_T43 = T44,call_cl(_T43,[_env,_name,_fc])),(call_cl(_debug,['[|]'("prev-var",'[|]'(_name,'[|]'(_n,'[|]'(_tc,[]))))]),get_(_Env,"push_on",T46),_T45 = T46,call_cl(_T45,[_env,"upvals",fc_Id(_name,_tc),_env2]),_s2 = "_"+_name);_n = "out",_s2 = "_"+_name,_tc = '[|]'("Any",[]),get_(_Env,"push",T48),_T47 = T48,call_cl(_T47,[_env,_fc,_env2]))))). % var2 gen2_var2(_env,_env2,_fc,_s2,_upvals):-_upvals=[_debug],(_fc = fc_Var(_name,_obj,_type),_env = _env2,((_obj = "args",_s2 = "_"+_name);(dif(_obj,"args"),call_cl(_debug,['[|]'("id",'[|]'(_name,'[|]'(_type,[])))]),_s2 = "_"+_name))). % map1 gen2_map1(_env,_l,_l2,_upvals):-_upvals=[_debug],((((true),(_l = '[|]'(_e1,_e2),_l2 = '[|]'(_s,_e4),!,get_(_env,"module",T39),_s = "nb_getval("+T39+"_"+_e1+",_"+_e1+"),",call(gen2_map1(_env,_e2,_e4),_upvals));call_cl(_debug,['[|]'(2,'[|]'(_l,'[|]'(_l2,[])))]),_l = [],_l2 = []))). % new_env gen2_new_env(_e,_upvals):-_upvals=[_env_from],(call_cl(_env_from,[_e,[]])). % env_from gen2_env_from(_e,_prev,_upvals):-_upvals=[_set,_set,_set,_Env,_table],(get_(_table,"new",T35),_T34 = T35,call_cl(_T34,[_t1]),get_(_Env,"new",T37),_T36 = T37,call_cl(_T36,[_e1,_prev,_t1]),call_cl(_set,[_e1,"mode","fn",_e2]),call_cl(_set,[_e2,"ids",[],_e3]),call_cl(_set,[_e3,"g",[],_e])). % env_make gen2_env_make(_e,_e1,_upvals):-_upvals=[_set,_set],(call_cl(_set,[_e1,"vars",[],_e2]),call_cl(_set,[_e2,"prev",_e1,_e])). % varname gen2_varname(_l2,_sb,_upvals):-_upvals=[],(_l2 = fc_Id(_name,_),_sb = "_"+_name). % generate_cond_normal gen2_generate_cond_normal(_l,_code2,_env,_env2,_upvals):-_upvals=[_list,_generate_cond],(call_cl(_generate_cond,[_l,_l2,_env,_env2]),get_(_list,"join",T33),_T32 = T33,call_cl(_T32,[_l2,";",_code2])). % generate_cond_nest gen2_generate_cond_nest(_l,_s2,_env,_env2,_opt,_upvals):-_upvals=[_generate_body,_generate_body,_debug,_neg,_generate_body,_generate_body,_generate_body,_generate_body,_generate_body],(((_l = '[|]'(_c,[]))->(call_cl(_generate_body,[_c,_s2,_env,_env2]));((_l = '[|]'(_c,_tail))->(((_opt = "!";_opt = "choose")->(_c = fc_Pair(_a,_b),call_cl(_generate_body,[_a,_sa,_env,_env_a]),call_cl(_generate_body,[_b,_sb,_env_a,_env1]),_s2 = "("+_sa+")->"+"("+_sb+");"+"("+_sc+")");((_opt = "if")->(_c = fc_Pair(_a,_b),call_cl(_generate_body,[_a,_sa,_env,_env_a]),call_cl(_generate_body,[_b,_sb,_env_a,_env_b]),((call_cl(_neg,[_a,_na]))->(true);(throw("complex condition for if-else"))),call_cl(_debug,['[|]'("n",'[|]'(_na,[]))]),call_cl(_generate_body,[_na,_nsa,_env_b,_env1]),_s2 = "("+_sa+","+_sb+");"+"("+_nsa+","+_sc+")");(call_cl(_generate_body,[_c,_s,_env,_env1]),_s2 = "("+_s+";"+_sc+")"))),call(gen2_generate_cond_nest(_tail,_sc,_env1,_env2,_opt),_upvals));((_l = []),(_s2 = "",_env2 = _env)))),!). % neg gen2_neg(_f,_f2,_upvals):-_upvals=[],(((_f = fc_Eq(_a,_b,_info),_f2 = fc_Neq(_a,_b));(dif(_f,fc_Eq(_a,_b,_info)),(_f = fc_Neq(_a,_b),_f2 = fc_Eq(_a,_b,_info));(dif(_f,fc_Neq(_a,_b)),(_f = fc([],"True"),_f2 = fc([],"False"));(dif(_f,fc([],"True")),(_f = fc([],"False"),_f2 = fc([],"True"));(dif(_f,fc([],"False")),(_f = fc_Inequality(_a,_b,_op,_info),((_op = "!=",_fn = "=");(dif(_op,"!="),(_op = "<",_fn = ">=");(dif(_op,"<"),(_op = "<=",_fn = ">");(dif(_op,"<="),(_op = ">",_fn = "<=");(dif(_op,">"),(_op = ">=",_fn = "<");(dif(_op,">="),throw("compiler error"))))))),_f2 = fc_Inequality(_a,_b,_fn,_info));(dif(_f,fc_Inequality(_a,_b,_op,_info)),writeln_(_f),false))))))). % generate_cond gen2_generate_cond(_l,_l2,_env,_env2,_upvals):-_upvals=[_generate_body],(((_l = [_c|_tail],call_cl(_generate_body,[_c,_s,_env,_env1]),_l2 = '[|]'("("+_s+")",_tail2),call(gen2_generate_cond(_tail,_tail2,_env1,_env2),_upvals));(dif(_l,[_c|_tail]),(_l = []),(_l2 = [],_env2 = _env)))). % push_var gen2_push_var(_env,_env2,_name,_type,_upvals):-_upvals=[_Env],(get_(_Env,"push",T31),_T30 = T31,call_cl(_T30,[_env,fc_Var(_name,"out",_type),_env2])). % push_types gen2_push_types(_env,_env2,_l,_ts,_upvals):-_upvals=[_Env,_extract_type,_Env,_extract_type],((((true),(_l = '[|]'(_f1,_tail),_ts = '[|]'(_t1,_t2),call_cl(_extract_type,[_env,_f1,_t1]),call(gen2_push_types(_env,_env_a,_tail,_t2),_upvals),_f1 = fc_Id(_name,_),get_(_Env,"push",T29),_T28 = T29,call_cl(_T28,[_env_a,fc_Var(_name,"args",_t1),_env2]));_l = [],_ts = [],_env2 = _env))). % extract_type_args gen2_extract_type_args(_l,_ts,_env,_upvals):-_upvals=[_extract_types,_extract_type,_extract_type,_extract_type],((((true),(_l = '[|]'(_f1,[]),_ts = '[|]'(_t,[]),call_cl(_extract_type,[_env,_f1,_t]));(_l = '[|]'(_f1,_tail),_ts = '[|]'(_t1,_t2),call_cl(_extract_type,[_env,_f1,_t1]),call_cl(_extract_types,[_env,_tail,_t2]);_l = [],_ts = [])))). % extract_types gen2_extract_types(_env,_l,_ts,_upvals):-_upvals=[_extract_type,_extract_type],((((true),(_l = '[|]'(_f1,_tail),_ts = '[|]'(_t1,_t2),call_cl(_extract_type,[_env,_f1,_t1]),call(gen2_extract_types(_env,_tail,_t2),_upvals));_l = [],_ts = []))). % send gen2_send(_a,_type,_upvals):-_upvals=[],(_a = [_type|_]). % extract_type_id gen2_extract_type_id(_env,_f,_type,_info,_upvals):-_upvals=[_debug,_is_functor,_custom_throw,_debug,_debug,_debug,_has],(_f = fc_Id(_name,_t1),(((get_(_env,"vars",T25),call_cl(_has,[T25,fc_Var(_name,_,_t2)])),(call_cl(_debug,['[|]'("type-id",'[|]'(_name,'[|]'(_t1,'[|]'(_t2,[]))))]),((_t1 = [],_type1 = '[|]'("Any",[]));(dif(_t1,[]),_type1 = _t1)),((_t2 = [],_type2 = '[|]'("Any",[]));(dif(_t2,[]),_type2 = _t2)),((_type2 = '[|]'("Any",[]),_type = _type1);(dif(_type2,'[|]'("Any",[])),(_type1 = '[|]'("Any",[]),call_cl(_debug,['[|]'("any",[])]),_type = _type2);(dif(_type1,'[|]'("Any",[])),(_type2 = _type1,_type = _type2);(dif(_type2,_type1),call_cl(_debug,['[|]'(_type2,'[|]'(_t1,[]))]),call_cl(_custom_throw,["Variable defined with different types",_info]))))));((call_cl(_is_functor,[_name,_env])),(_type = '[|]'("Functor",[]));((_name = "Cons"),(_type = '[|]'("List",[]));call_cl(_debug,[_vars]),def(_t1),((_t1 = [],_type = '[|]'("Any",[]));(dif(_t1,[]),_type = _t1))))))). % is_functor gen2_is_functor(_name,_env,_upvals):-_upvals=[_list],(get_(_env,"fcs",T22),_fcs = T22,get_(_list,"find",T24),_T23 = T24,call_cl(_T23,[_fcs,fc_Var(_name,_n,_),_])). % sym gen2_sym(_c,_upvals):-_upvals=[_gensym],(call_cl(_gensym,["T",_c])). % genvar gen2_genvar(_x,_upvals):-_upvals=[_gensym],(call_cl(_gensym,["T",_c]),_x = fc_Id(_c,[])). % gensym gen2_gensym(_prefix,_x,_upvals):-_upvals=[],(gensym(_prefix,_x)). % double_string gen2_double_string(_s1,_s2,_upvals):-_upvals=[_str,_string,_string],(get_(_string,"slice",T18),_T17 = T18,get_(_string,"size",T21),_T20 = T21,call_cl(_T20,[_s1,_T19]),call_cl(_T17,[_s1,1,_T19-1,_sa]),call_cl(_str,[_sa,_s2])). % remove_double_string gen2_remove_double_string(_s1,_sa,_upvals):-_upvals=[_string,_string],(get_(_string,"slice",T13),_T12 = T13,get_(_string,"size",T16),_T15 = T16,call_cl(_T15,[_s1,_T14]),call_cl(_T12,[_s1,1,_T14-1,_sa])). % str gen2_str(_s,_s1,_upvals):-_upvals=[_debug,_double_quote],(call_cl(_double_quote,[_c]),call_cl(_debug,['[|]'(_s,'[|]'(_c,[]))]),_s1 = _c+_s+_c). % double_quote gen2_double_quote(_c,_upvals):-_upvals=[_string],(get_(_string,"code",T11),_T10 = T11,call_cl(_T10,[_c,34])). % single_quote gen2_single_quote(_c,_upvals):-_upvals=[_string],(get_(_string,"code",T9),_T8 = T9,call_cl(_T8,[_c,39])). % custom_throw gen2_custom_throw(_msg,_info,_upvals):-_upvals=[_io],(_info = fc_Info(_line,_col),get_(_io,"writeln",T3),_T2 = T3,call_cl(_T2,[_info]),str("(line "+_line+", col "+_col+") "+_msg,T4),throw(T4)). % debug_write gen2_debug_write(_x,_upvals):-_upvals=[],(true). % debug gen2_debug(_x,_upvals):-_upvals=[],(true). % main gen2(X):-creq("logic",_logic),creq("io",_io),creq("table",_table),creq("mutable",_mutable),_debug = clos([],gen2_debug),_debug_write = clos([],gen2_debug_write),get_(_logic,"halt",T1),_halt = T1,creq("env",_Env),creq("types",_types),creq("list",_list),creq("string",_string),_custom_throw = clos([_io],gen2_custom_throw),get_(_table,"set",T5),_set = T5,get_(_table,"get",T6),_get = T6,get_(_list,"has",T7),_has = T7,_single_quote = clos([_string],gen2_single_quote),_double_quote = clos([_string],gen2_double_quote),_str = clos([_debug,_double_quote],gen2_str),_remove_double_string = clos([_string,_string],gen2_remove_double_string),_double_string = clos([_str,_string,_string],gen2_double_string),_gensym = clos([],gen2_gensym),_genvar = clos([_gensym],gen2_genvar),_sym = clos([_gensym],gen2_sym),_is_functor = clos([_list],gen2_is_functor),_extract_type_id = clos([_debug,_is_functor,_custom_throw,_debug,_debug,_debug,_has],gen2_extract_type_id),_send = clos([],gen2_send),_extract_types = clos([_extract_type,_extract_type],gen2_extract_types),_extract_type_args = clos([_extract_types,_extract_type,_extract_type,_extract_type],gen2_extract_type_args),_push_types = clos([_Env,_extract_type,_Env,_extract_type],gen2_push_types),_push_var = clos([_Env],gen2_push_var),_generate_cond = clos([_generate_body],gen2_generate_cond),_neg = clos([],gen2_neg),_generate_cond_nest = clos([_generate_body,_generate_body,_debug,_neg,_generate_body,_generate_body,_generate_body,_generate_body,_generate_body],gen2_generate_cond_nest),_generate_cond_normal = clos([_list,_generate_cond],gen2_generate_cond_normal),_varname = clos([],gen2_varname),_env_make = clos([_set,_set],gen2_env_make),_env_from = clos([_set,_set,_set,_Env,_table],gen2_env_from),_new_env = clos([_env_from],gen2_new_env),_map1 = clos([_debug],gen2_map1),_var2 = clos([_debug],gen2_var2),_setup_var2 = clos([_Env,_Env,_debug,_Env,_var2,_list],gen2_setup_var2),_setup_var = clos([_setup_var2,_debug,_list,_Env],gen2_setup_var),_eq3 = clos([],gen2_eq3),_eq2 = clos([_eq3,_debug],gen2_eq2),_compare_relation = clos([_custom_throw,_io,_io,_io,_debug,_debug,_types,_eq2,_debug,_debug,_extract_type_args],gen2_compare_relation),_extract_args = clos([_string,_term,_term],gen2_extract_args),_lambda6 = clos([],gen2_lambda6),_lambda4 = clos([],gen2_lambda4),_lambda5 = clos([_lambda4,_mutable],gen2_lambda5),_apply = clos([],gen2_apply),_setup_pred = clos([_custom_throw,_lambda5,_Env,_debug,_Env,_lambda5,_setup_var,_debug,_apply,_debug,_compare_relation,_list,_debug,_debug],gen2_setup_pred),_listify = clos([_term,_term],gen2_listify),_func = clos([_debug,_setup_pred,_debug,_gensym,_extract_args,_gensym,_term,_debug,_gensym,_term,_debug,_gensym,_term,_debug,_debug,_extract_args,_is_functor,_listify],gen2_func),_filter = clos([],gen2_filter),_table_eq = clos([_debug,_term,_term],gen2_table_eq),_to_table = clos([_debug,_set,_extract_type,_remove_double_string,_debug,_table_eq,_debug,_debug,_gensym],gen2_to_table),_to_list = clos([_string,_term,_string,_term,_term],gen2_to_list),_term_ = clos([_term,_double_string],gen2_term_),_make_rel = clos([_debug,_extract_args,_generate_body,_Env,_debug,_set,_push_types,_debug,_env_make],gen2_make_rel),_assert = clos([_logic],gen2_assert),_is_num = clos([],gen2_is_num),_get_type = clos([_has],gen2_get_type),_check_type = clos([_debug,_get_type,_debug],gen2_check_type),_pushid = clos([_set,_list],gen2_pushid),_term = clos([_term_,_debug,_extract_type,_setup_var,_get_type,_sym,_generate_body,_list,_genvar,_debug,_debug,_to_table,_set,_set,_table,_gensym,_gensym,_gensym,_filter,_debug,_to_list,_lambda6,_pushid,_set,_extract_args,_debug,_make_rel,_debug,_debug,_gensym,_setup_var,_sym,_setup_var,_check_type,_get_type,_sym,_func,_setup_var,_debug,_is_functor,_debug,_debug_write],gen2_term),_extract_type_information = clos([_list,_string,_io,_io,_io,_io,_io,_io],gen2_extract_type_information),_generate_fact = clos([_generate_body,_Env,_table,_Env,_Env,_debug,_debug,_list,_debug],gen2_generate_fact),_generate_rel = clos([_extract_args,_set,_debug,_list,_extract_type,_term,_debug,_string,_string,_Env,_term],gen2_generate_rel),_env_update = clos([_Env,_debug,_Env,_Env,_debug,_list,_Env,_logic],gen2_env_update),_set_type = clos([_env_update],gen2_set_type),_to_table_type = clos([_debug,_set,_extract_type,_remove_double_string,_debug],gen2_to_table_type),_extract_type = clos([_extract_types,_debug,_debug,_to_table_type,_table,_extract_type_id],gen2_extract_type),_specialize_type = clos([_io,_env_update,_types],gen2_specialize_type),_compare_types = clos([_custom_throw,_io,_specialize_type,_debug,_types,_extract_type,_extract_type],gen2_compare_types),_get_stm = clos([_setup_pred,_extract_args],gen2_get_stm),_generate_body = clos([_custom_throw,_generate_fact,_debug,_debug,_term,_term,_debug,_debug,_Env,_Env,_debug,_genvar,_setup_pred,_extract_args,_debug,_debug,_generate_rel,_debug,_compare_types,_term,_term,_debug,_debug,_debug,_push_var,_extract_types,_set,_neg,_get_stm,_debug,_debug,_term,_term,_extract_args,_debug,_debug,_generate_cond_nest,_debug,_neg,_debug,_debug,_generate_cond_nest,_debug,_debug,_debug_write],gen2_generate_body),_header = clos([],gen2_header),_generate_stm = clos([_generate_body],gen2_generate_stm),_concat_if = clos([],gen2_concat_if),_each2 = clos([_concat_if],gen2_each2),_each3 = clos([_concat_if],gen2_each3),_serialize_item = clos([_types,_debug,_debug],gen2_serialize_item),_notblank = clos([],gen2_notblank),_generate = clos([_mutable,_each2,_list,_list,_notblank,_serialize_item,_list,_list,_list,_serialize_item,_list,_list,_list,_debug,_debug,_extract_type,_header,_gensym,_generate_stm,_set],gen2_generate),_eval = clos([_debug,_debug],gen2_eval),_run = clos([_generate],gen2_run),_generate_body_ = clos([_generate_body],gen2_generate_body_),_generate_ = clos([_generate],gen2_generate_),new(T206),set_(T206,"generate_body",_generate_body_,T208),set_(T208,"generate_world",_generate_world,T209),set_(T209,"run",_run,T210),set_(T210,"generate",_generate_,T211),set_(T211,"new_env",_new_env,T212),set_(T212,"header",_header,T207),_t = T207,call_cl(_debug,[_t]),X=_t.