up_qat_dew.c (2095B)
1 #include "all.h" 2 3 static u3_noun 4 _omit(u3_noun b, u3_noun k) 5 { 6 if (u3_nul == b) { 7 return u3nc(u3_nul, u3_nul); 8 } 9 10 u3_noun hob = u3h(b); 11 12 if (c3n == u3ud(hob)) { 13 return u3m_bail(c3__exit); 14 } 15 else switch ( hob ) { 16 default: 17 return u3m_bail(c3__exit); 18 19 case c3__tip: { 20 u3_noun kb, pb, vb; 21 u3x_trel(u3t(b), &kb, &pb, &vb); 22 23 u3_noun mk = u3r_mug(k); 24 u3_noun mkb = u3r_mug(kb); 25 26 return (c3n == u3r_sing(mk, mkb)) 27 ? u3nc(u3_nul, u3k(b)) 28 : u3nc(u3nq(u3_nul, u3k(kb), u3k(pb), u3k(vb)), u3_nul); 29 } 30 31 case c3__bin: { 32 u3_noun kb, pb, vb; 33 u3_noun tb, mb, lb, rb; 34 u3x_qual(u3t(b), &kb, &pb, &vb, &tb); 35 u3x_trel(tb, &mb, &lb, &rb); 36 37 if (c3y == u3qdu_feud(mb, k, kb)) { 38 return u3nc(u3_nul, u3k(b)); 39 } 40 41 u3_atom mk = u3r_mug(k); 42 u3_atom mkb = u3r_mug(kb); 43 44 if (c3y == u3r_sing(mk, mkb)) { 45 return u3nc(u3nq(u3_nul, u3k(kb), u3k(pb), u3k(vb)), 46 u3qdu_fuse(mb, lb, rb)); 47 } 48 else if (c3y == u3qdu_zero(mb, k)) { 49 u3_noun med = _omit(lb, k); 50 u3_noun pro = u3nc(u3k(u3h(med)), 51 u3qdu_funk(kb, pb, vb, mb, u3t(med), rb)); 52 53 u3z(med); 54 return pro; 55 } 56 else { 57 u3_noun med = _omit(rb, k); 58 u3_noun pro = u3nc(u3k(u3h(med)), 59 u3qdu_wane(kb, pb, vb, mb, lb, u3t(med))); 60 61 u3z(med); 62 return pro; 63 } 64 } 65 } 66 } 67 68 u3_noun 69 u3qdu_qat_dew(u3_noun a, u3_noun k) 70 { 71 u3_noun med = _omit(a, k); 72 73 u3_noun pm, qm; 74 u3x_cell(med, &pm, &qm); 75 76 if (u3_nul == pm) { 77 u3z(med); 78 return u3_nul; 79 } 80 else { 81 u3_noun vel = u3t(pm); 82 83 u3_noun pv, qv, rv; 84 u3x_trel(vel, &pv, &qv, &rv); 85 86 u3_noun pro = u3nc(u3_nul, u3nq(u3k(pv), u3k(qv), u3k(rv), u3k(qm))); 87 88 u3z(med); 89 return pro; 90 } 91 } 92 93 u3_noun 94 u3wdu_qat_dew(u3_noun cor) 95 { 96 u3_noun a, k; 97 98 if ( (c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &k, 0)) ) 99 { 100 return u3m_bail(c3__exit); 101 } else { 102 return u3qdu_qat_dew(a, k); 103 } 104 } 105