up_qat_del.c (1250B)
1 #include "all.h" 2 3 u3_noun 4 u3qdu_qat_del(u3_noun a, u3_noun k) 5 { 6 if (u3_nul == a) { 7 return u3_nul; 8 } 9 10 u3_noun hoc = u3h(a); 11 12 if (c3n == u3ud(hoc)) { 13 return u3m_bail(c3__exit); 14 } 15 else switch ( hoc ) { 16 default: 17 return u3m_bail(c3__exit); 18 19 case c3__tip: { 20 return ( c3y == u3r_sing(k, u3h(u3t(a))) ) ? u3_nul : u3k(a); 21 } 22 23 case c3__bin: { 24 u3_noun ka, pa, va, ma; 25 u3_noun ta, la, ra; 26 u3x_qual(u3t(a), &ka, &pa, &va, &ta); 27 u3x_trel(ta, &ma, &la, &ra); 28 29 if (c3y == u3qdu_feud(ma, k, ka)) { 30 return u3k(a); 31 } 32 else if (c3y == u3r_sing(k, ka)) { 33 return u3qdu_fuse(ma, la, ra); 34 } 35 else if (c3y == u3qdu_zero(ma, k)) { 36 u3_noun ul = u3qdu_qat_del(la, k); 37 u3_noun pro = u3qdu_funk(ka, pa, va, ma, ul, ra); 38 39 u3z(ul); 40 41 return pro; 42 } 43 else { 44 u3_noun ur = u3qdu_qat_del(ra, k); 45 u3_noun pro = u3qdu_wane(ka, pa, va, ma, la, ur); 46 47 u3z(ur); 48 49 return pro; 50 } 51 } 52 } 53 } 54 55 u3_noun 56 u3wdu_qat_del(u3_noun cor) 57 { 58 u3_noun a, k; 59 60 if ( (c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &k, 0)) ) 61 { 62 return u3m_bail(c3__exit); 63 } else { 64 return u3qdu_qat_del(a, k); 65 } 66 } 67 68