1 /* j/6/comb.c
2 **
3 */
4 #include "all.h"
5 
6 
7 /* functions
8 */
9   u3_noun
u3qf_comb(u3_noun mal,u3_noun buz)10   u3qf_comb(u3_noun mal,
11             u3_noun buz)
12   {
13     if ( (u3_none == mal) || (u3_none == buz) ) {
14       return u3_none;
15     }
16     else {
17       u3_noun p_mal, q_mal, p_buz, q_buz, pp_buz, pq_buz;
18 
19       if ( (c3y == u3r_p(mal, 0, &p_mal)) && (0 != p_mal) ) {
20         if ( (c3y == u3r_p(buz, 0, &p_buz)) && (0 != p_buz) ) {
21           return u3nc(0,
22                       u3qc_peg(p_mal, p_buz));
23         }
24         else if ( c3y == u3r_pq(buz, 2, &p_buz, &q_buz) &&
25                   c3y == u3r_p(p_buz, 0, &pp_buz) &&
26                   c3y == u3r_p(q_buz, 0, &pq_buz) )
27         {
28           return u3nt(2,
29                       u3nc(0,
30                            u3qc_peg(p_mal, pp_buz)),
31                       u3nc(0,
32                            u3qc_peg(p_mal, pq_buz)));
33         }
34         else return u3nt(7,
35                          u3k(mal),
36                          u3k(buz));
37       }
38 #if 1
39       else if ( (c3y == u3r_bush(mal, &p_mal, &q_mal)) &&
40                 (c3y == u3du(p_mal)) &&
41                 (c3y == u3du(q_mal)) &&
42                 (0 == u3h(q_mal)) &&
43                 (1 == u3t(q_mal)) )
44       {
45         return u3nt(8,
46                     u3k(p_mal),
47                     u3k(buz));
48       }
49 #endif
50       else if ( (c3y == u3r_p(buz, 0, &p_buz)) &&
51                 (c3y == u3r_sing(1, p_buz)) )
52       {
53         return u3k(mal);
54       }
55       else return u3nt(7,
56                        u3k(mal),
57                        u3k(buz));
58     }
59   }
60   u3_noun
u3wf_comb(u3_noun cor)61   u3wf_comb(u3_noun cor)
62   {
63     u3_noun mal, buz;
64 
65     if ( c3n == u3r_mean(cor, u3x_sam_2, &mal, u3x_sam_3, &buz, 0) ) {
66       return u3_none;
67     } else {
68       return u3qf_comb(mal, buz);
69     }
70   }
71