1 /* j/6/loot.c 2 ** 3 */ 4 #include "all.h" 5 6 7 /* internals 8 */ 9 static u3_noun _loot_in(u3_noun cog,u3_noun dom,u3_atom axe)10 _loot_in(u3_noun cog, 11 u3_noun dom, 12 u3_atom axe) 13 { 14 if ( u3_nul == dom ) { 15 return u3_nul; 16 } 17 else { 18 u3_noun n_dom, l_dom, r_dom; 19 20 u3r_trel(dom, &n_dom, &l_dom, &r_dom); 21 if ( c3n == u3du(n_dom) ) { 22 return u3m_bail(c3__fail); 23 } 24 else { 25 u3_noun qqn_dom = u3t(u3t(n_dom)); 26 u3_noun yep = u3qf_look(cog, qqn_dom); 27 28 if ( (u3_nul == l_dom) && (u3_nul == r_dom) ) { 29 if ( u3_nul == yep ) { 30 return u3_nul; 31 } else { 32 u3_noun u_yep = u3t(yep); 33 u3_noun pro; 34 35 pro = u3nt(u3_nul, u3qc_peg(axe, u3h(u_yep)), u3k(u3t(u_yep))); 36 u3z(yep); 37 return pro; 38 } 39 } 40 else if ( (u3_nul == l_dom) ) { 41 if ( u3_nul == yep ) { 42 u3_noun nax = u3qc_peg(axe, 3); 43 u3_noun pro; 44 45 pro = _loot_in(cog, r_dom, nax); 46 u3z(nax); 47 return pro; 48 } 49 else { 50 u3_noun u_yep = u3t(yep); 51 u3_noun nax = u3qc_peg(axe, 2); 52 u3_noun pro; 53 54 pro = u3nt(u3_nul, u3qc_peg(nax, u3h(u_yep)), u3k(u3t(u_yep))); 55 u3z(nax); 56 u3z(yep); 57 return pro; 58 } 59 } 60 else if ( (u3_nul == r_dom) ) { 61 if ( u3_nul == yep ) { 62 u3_noun nax = u3qc_peg(axe, 3); 63 u3_noun pro; 64 65 pro = _loot_in(cog, l_dom, nax); 66 u3z(nax); 67 return pro; 68 } 69 else { 70 u3_noun u_yep = u3t(yep); 71 u3_noun nax = u3qc_peg(axe, 2); 72 u3_noun pro; 73 74 pro = u3nt(u3_nul, u3qc_peg(nax, u3h(u_yep)), u3k(u3t(u_yep))); 75 u3z(nax); 76 u3z(yep); 77 return pro; 78 } 79 } 80 else { 81 if ( u3_nul == yep ) { 82 u3_noun nax = u3qc_peg(axe, 6); 83 u3_noun pey; 84 85 pey = _loot_in(cog, l_dom, nax); 86 u3z(nax); 87 88 if ( u3_nul != pey ) { 89 return pey; 90 } 91 else { 92 u3_noun nax = u3qc_peg(axe, 7); 93 u3_noun pro; 94 95 pro = _loot_in(cog, r_dom, nax); 96 u3z(nax); 97 return pro; 98 } 99 } 100 else { 101 u3_noun u_yep = u3t(yep); 102 u3_noun nax = u3qc_peg(axe, 2); 103 u3_noun pro; 104 105 pro = u3nt(u3_nul, u3qc_peg(nax, u3h(u_yep)), u3k(u3t(u_yep))); 106 u3z(nax); 107 u3z(yep); 108 return pro; 109 } 110 } 111 } 112 } 113 } 114 115 /* functions 116 */ 117 u3_noun u3qf_loot(u3_noun cog,u3_noun dom)118 u3qf_loot(u3_noun cog, 119 u3_noun dom) 120 { 121 return _loot_in(cog, dom, 1); 122 } 123 u3_noun u3wf_loot(u3_noun cor)124 u3wf_loot(u3_noun cor) 125 { 126 u3_noun cog, dom; 127 128 if ( c3n == u3r_mean(cor, u3x_sam_2, &cog, u3x_sam_3, &dom, 0) ) { 129 return u3m_bail(c3__fail); 130 } else { 131 return u3qf_loot(cog, dom); 132 } 133 } 134