up_cut.c (1290B)
1 #include "all.h" 2 3 u3_noun 4 u3qdu_cut(u3_noun a) 5 { 6 if (u3_nul == a) { 7 return u3_nul; 8 } 9 10 u3_noun lal = u3h(a); 11 12 if (c3n == u3ud(lal)) { 13 return u3m_bail(c3__exit); 14 } 15 else switch ( lal ) { 16 default: 17 return u3m_bail(c3__exit); 18 19 case c3__tip: { 20 u3_noun ka, pa, va, vva, tva; 21 u3x_trel(u3t(a), &ka, &pa, &va); 22 u3x_cell(va, &vva, &tva); 23 24 u3_noun hol = u3qdu_qor_bot(tva); 25 u3_noun pro = (u3_nul == hol) ? u3_nul : u3nc(c3__tip, u3k(u3t(hol))); 26 27 u3z(hol); 28 return pro; 29 } 30 31 case c3__bin: { 32 u3_noun ka, pa, va, ta, vva, tva; 33 u3_noun ma, la, ra; 34 35 u3x_qual(u3t(a), &ka, &pa, &va, &ta); 36 u3x_cell(va, &vva, &tva); 37 u3x_trel(ta, &ma, &la, &ra); 38 39 u3_noun hol = u3qdu_qor_bot(tva); 40 41 if (u3_nul == hol) { 42 return u3qdu_fuse(ma, la, ra); 43 } 44 else { 45 u3_noun kh, ph, vh; 46 u3x_trel(u3t(hol), &kh, &ph, &vh); 47 48 u3_noun pre = u3qdu_fuse(ma, la, ra); 49 u3_noun pro = u3qdu_qat_raw(pre, kh, ph, vh); 50 51 u3z(hol); 52 u3z(pre); 53 54 return pro; 55 } 56 } 57 } 58 } 59 60 u3_noun 61 u3wdu_cut(u3_noun cor) 62 { 63 u3_noun a; 64 65 if ( (c3n == u3r_mean(cor, u3x_sam, &a, 0)) ) 66 { 67 return u3m_bail(c3__exit); 68 } else { 69 return u3qdu_cut(a); 70 } 71 } 72 73