up_qor_llsin.c (1700B)
1 #include "all.h" 2 3 u3_noun 4 u3qdu_qor_llsin(u3_noun n_a, u3_noun l_a, u3_noun m_a, u3_noun r_a) 5 { 6 if ( c3n == u3du(r_a) ) { 7 return u3m_bail(c3__exit); 8 } 9 10 u3_noun b = u3t(u3t(r_a)); 11 12 u3_noun n_b, l_b, m_b, r_b; 13 u3_noun k_n_b, t_b; 14 u3x_qual(b, &n_b, &l_b, &m_b, &r_b); 15 u3x_cell(n_b, &k_n_b, &t_b); 16 17 u3_noun p_n_b = u3h(t_b); 18 u3_noun hor = u3h(r_a); 19 20 if ( c3n == u3ud(hor) ) { 21 return u3m_bail(c3__exit); 22 } 23 else switch ( hor ) { 24 default: 25 return u3m_bail(c3__exit); 26 27 case c3__llos: { 28 u3_noun k_n_a, t_a; 29 u3x_cell(n_a, &k_n_a, &t_a); 30 31 u3_noun p_n_a = u3h(t_a); 32 33 if ( (c3n == u3ud(p_n_a)) || (c3n == u3ud(p_n_b)) ) { 34 return u3m_bail(c3__exit); 35 } 36 37 if ( c3y == u3qdu_lex(p_n_a, k_n_a, p_n_b, k_n_b) ) { 38 u3_noun pre = u3qdu_qor_rlos(n_b, l_a, m_a, l_b); 39 u3_noun pro = u3qdu_qor_llos(n_a, pre, m_b, r_b); 40 41 u3z(pre); 42 43 return pro; 44 } 45 else { 46 u3_noun pre = u3qdu_qor_llos(n_a, l_a, m_a, l_b); 47 u3_noun pro = u3qdu_qor_llos(n_b, pre, m_b, r_b); 48 49 u3z(pre); 50 51 return pro; 52 } 53 } 54 55 case c3__rlos: { 56 u3_noun pre = u3qdu_qor_llos(n_a, l_a, m_a, l_b); 57 u3_noun pro = u3qdu_qor_rlos(n_b, pre, m_b, r_b); 58 59 u3z(pre); 60 61 return pro; 62 } 63 } 64 } 65 66 u3_noun 67 u3wdu_qor_llsin(u3_noun cor) 68 { 69 u3_noun a; 70 71 if ( (c3n == u3r_mean(cor, u3x_sam, &a, 0 )) || 72 (c3n == u3du(a)) ) 73 { 74 return u3m_bail(c3__exit); 75 } else { 76 u3_noun n, l, m, r; 77 u3x_qual(a, &n, &l, &m, &r); 78 79 if ( (c3n == u3du(n)) || (c3n == u3ud(m)) ) { 80 return u3m_bail(c3__exit); 81 } 82 else { 83 return u3qdu_qor_llsin(n, l, m, r); 84 } 85 } 86 } 87