mirror of
https://github.com/ilyakooo0/urbit.git
synced 2024-12-25 07:52:59 +03:00
Merge branch 'treapfactor' (#1724)
* treapfactor: u3: refactors disabled map treap jets (+int:by and +uni:by) u3: refactors map treap jets (+by) u3: refactors disabled set treap jet (+int:in) u3: refactors set treap jets (+in) u3: adds u3r_vmean (explicit varargs list), u3x_mean u3: cleans up xtract.c (mostly style, minor refactoring) Signed-off-by: Jared Tobin <jared@tlon.io>
This commit is contained in:
commit
1a6e5ce9fa
@ -29,6 +29,8 @@
|
||||
** Attempt to deconstruct `a` by axis, noun pairs; 0 terminates.
|
||||
** Axes must be sorted in tree order.
|
||||
*/
|
||||
c3_o
|
||||
u3r_vmean(u3_noun a, va_list ap);
|
||||
c3_o
|
||||
u3r_mean(u3_noun a, ...);
|
||||
|
||||
|
@ -81,6 +81,14 @@
|
||||
u3_noun
|
||||
u3x_at(u3_noun axe, u3_noun som);
|
||||
|
||||
/* u3x_mean():
|
||||
**
|
||||
** Attempt to deconstruct `a` by axis, noun pairs; 0 terminates.
|
||||
** Axes must be sorted in tree order.
|
||||
*/
|
||||
void
|
||||
u3x_mean(u3_noun a, ...);
|
||||
|
||||
/* u3x_cell():
|
||||
**
|
||||
** Divide `a` as a cell `[b c]`.
|
||||
|
@ -5,78 +5,72 @@
|
||||
|
||||
/* internal functions
|
||||
*/
|
||||
static
|
||||
u3_noun _b_bif_putroot(u3_noun a,
|
||||
u3_noun b)
|
||||
{
|
||||
if ( u3_nul == a) {
|
||||
return u3nt(u3k(b), u3_nul, u3_nul);
|
||||
static u3_noun
|
||||
_b_bif_putroot(u3_noun a,
|
||||
u3_noun b)
|
||||
{
|
||||
if ( u3_nul == a ) {
|
||||
return u3nt(u3k(b), u3_nul, u3_nul);
|
||||
}
|
||||
else {
|
||||
u3_noun n_a, l_a, r_a;
|
||||
u3_noun p_n_a, q_n_a;
|
||||
u3_noun p_b, q_b;
|
||||
u3x_trel(a, &n_a, &l_a, &r_a);
|
||||
u3x_cell(b, &p_b, &q_b);
|
||||
u3x_cell(n_a, &p_n_a, &q_n_a);
|
||||
|
||||
if ( c3y == u3r_sing(p_b, p_n_a) ) {
|
||||
return u3nt(u3k(b), u3k(l_a), u3k(r_a));
|
||||
}
|
||||
else {
|
||||
u3_noun n_a, l_a, r_a;
|
||||
u3_noun p_n_a, q_n_a;
|
||||
u3_noun p_b, q_b;
|
||||
u3_noun c, n_c, l_c, r_c;
|
||||
u3_noun d;
|
||||
|
||||
if ( (c3n == u3r_trel(a, &n_a, &l_a, &r_a))
|
||||
|| (c3n == u3r_cell(b, &p_b, &q_b))
|
||||
|| (c3n == u3r_cell(n_a, &p_n_a, &q_n_a)) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
}
|
||||
else if ( c3y == u3r_sing(p_b, p_n_a) ) {
|
||||
return u3nt(u3k(b), u3k(l_a), u3k(r_a));
|
||||
if ( c3y == u3qc_gor(p_b, p_n_a) ) {
|
||||
c = _b_bif_putroot(l_a, b);
|
||||
u3r_trel(c, &n_c, &l_c, &r_c);
|
||||
d = u3nt(u3k(n_c),
|
||||
u3k(l_c),
|
||||
u3nt(u3k(n_a), u3k(r_c), u3k(r_a))
|
||||
);
|
||||
u3z(c);
|
||||
return d;
|
||||
}
|
||||
else {
|
||||
u3_noun c, n_c, l_c, r_c;
|
||||
u3_noun d;
|
||||
|
||||
if ( c3y == u3qc_gor(p_b, p_n_a) ) {
|
||||
c = _b_bif_putroot(l_a, b);
|
||||
u3r_trel(c, &n_c, &l_c, &r_c);
|
||||
d = u3nt(u3k(n_c),
|
||||
u3k(l_c),
|
||||
u3nt(u3k(n_a), u3k(r_c), u3k(r_a))
|
||||
);
|
||||
u3z(c);
|
||||
return d;
|
||||
} else {
|
||||
c = _b_bif_putroot(r_a, b);
|
||||
u3r_trel(c, &n_c, &l_c, &r_c);
|
||||
d = u3nt(u3k(n_c),
|
||||
u3nt(u3k(n_a), u3k(l_a), u3k(l_c)),
|
||||
u3k(r_c)
|
||||
);
|
||||
u3z(c);
|
||||
return d;
|
||||
}
|
||||
c = _b_bif_putroot(r_a, b);
|
||||
u3r_trel(c, &n_c, &l_c, &r_c);
|
||||
d = u3nt(u3k(n_c),
|
||||
u3nt(u3k(n_a), u3k(l_a), u3k(l_c)),
|
||||
u3k(r_c)
|
||||
);
|
||||
u3z(c);
|
||||
return d;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* functions
|
||||
*/
|
||||
u3_noun u3wdb_bif(u3_noun cor)
|
||||
{
|
||||
u3_noun a, b;
|
||||
if ( c3n == u3r_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
} else {
|
||||
return u3qdb_bif(a, b);
|
||||
}
|
||||
}
|
||||
u3_noun
|
||||
u3wdb_bif(u3_noun cor)
|
||||
{
|
||||
u3_noun a, b;
|
||||
u3x_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0);
|
||||
return u3qdb_bif(a, b);
|
||||
}
|
||||
|
||||
u3_noun u3qdb_bif(u3_noun a,
|
||||
u3_noun b)
|
||||
{
|
||||
u3_noun c, n_c, l_c, r_c;
|
||||
u3_noun d;
|
||||
u3_noun
|
||||
u3qdb_bif(u3_noun a,
|
||||
u3_noun b)
|
||||
{
|
||||
u3_noun c, n_c, l_c, r_c;
|
||||
u3_noun d;
|
||||
|
||||
c = _b_bif_putroot(a, b);
|
||||
u3r_trel(c, &n_c, &l_c, &r_c);
|
||||
d = u3nc(u3k(l_c), u3k(r_c));
|
||||
u3z(c);
|
||||
return d;
|
||||
}
|
||||
|
||||
/*
|
||||
u3_weak u3kdi_bif(u3_noun a, u3_noun b);
|
||||
*/
|
||||
c = _b_bif_putroot(a, b);
|
||||
u3r_trel(c, &n_c, &l_c, &r_c);
|
||||
d = u3nc(u3k(l_c), u3k(r_c));
|
||||
u3z(c);
|
||||
return d;
|
||||
}
|
||||
|
@ -5,107 +5,89 @@
|
||||
|
||||
/* functions
|
||||
*/
|
||||
static u3_noun
|
||||
_rebalance(u3_noun a)
|
||||
{
|
||||
u3_noun l_a, n_a, r_a;
|
||||
static u3_noun
|
||||
_rebalance(u3_noun a)
|
||||
{
|
||||
u3_noun n_a, l_a, r_a;
|
||||
u3x_trel(a, &n_a, &l_a, &r_a);
|
||||
|
||||
if ( c3n == u3r_trel(a, &n_a, &l_a, &r_a) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
if ( u3_nul == l_a) {
|
||||
return u3k(r_a);
|
||||
}
|
||||
else if ( u3_nul == r_a) {
|
||||
return u3k(l_a);
|
||||
}
|
||||
else {
|
||||
u3_noun n_l_a, l_l_a, r_l_a;
|
||||
u3_noun n_r_a, l_r_a, r_r_a;
|
||||
u3x_trel(l_a, &n_l_a, &l_l_a, &r_l_a);
|
||||
u3x_trel(r_a, &n_r_a, &l_r_a, &r_r_a);
|
||||
|
||||
if ( c3y == u3qc_mor(u3h(n_l_a), u3h(n_r_a)) ) {
|
||||
u3_noun new_right = u3nt(u3k(n_a),
|
||||
u3k(r_l_a),
|
||||
u3k(r_a));
|
||||
|
||||
u3_noun ret = u3nt(u3k(n_l_a),
|
||||
u3k(l_l_a),
|
||||
_rebalance(new_right));
|
||||
u3z(new_right);
|
||||
|
||||
return ret;
|
||||
}
|
||||
else {
|
||||
if ( u3_nul == l_a) {
|
||||
return u3k(r_a);
|
||||
}
|
||||
else if ( u3_nul == r_a) {
|
||||
return u3k(l_a);
|
||||
u3_noun new_left = u3nt(u3k(n_a),
|
||||
u3k(l_a),
|
||||
u3k(l_r_a));
|
||||
|
||||
u3_noun ret = u3nt(u3k(n_r_a),
|
||||
_rebalance(new_left),
|
||||
u3k(r_r_a));
|
||||
u3z(new_left);
|
||||
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
u3_noun
|
||||
u3qdb_del(u3_noun a,
|
||||
u3_noun b)
|
||||
{
|
||||
if ( u3_nul == a ) {
|
||||
return u3_nul;
|
||||
}
|
||||
else {
|
||||
u3_noun n_a, lr_a;
|
||||
u3_noun pn_a;
|
||||
u3x_cell(a, &n_a, &lr_a);
|
||||
u3x_cell(n_a, &pn_a, 0);
|
||||
|
||||
if ( c3y == u3r_sing(pn_a, b) ) {
|
||||
return _rebalance(a);
|
||||
}
|
||||
else {
|
||||
u3_noun l_a, r_a;
|
||||
u3x_cell(lr_a, &l_a, &r_a);
|
||||
|
||||
if ( c3y == u3qc_gor(b, pn_a) ) {
|
||||
return u3nt(u3k(n_a),
|
||||
u3qdb_del(l_a, b),
|
||||
u3k(r_a));
|
||||
}
|
||||
else {
|
||||
u3_noun n_l_a, l_l_a, r_l_a;
|
||||
u3_noun n_r_a, l_r_a, r_r_a;
|
||||
|
||||
if ( (c3n == u3r_trel(l_a, &n_l_a, &l_l_a, &r_l_a) ) ||
|
||||
(c3n == u3r_trel(r_a, &n_r_a, &l_r_a, &r_r_a) ) ||
|
||||
(c3n == u3du(n_l_a)) ||
|
||||
(c3n == u3du(n_r_a)) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
}
|
||||
else {
|
||||
if ( c3y == u3qc_mor(u3h(n_l_a), u3h(n_r_a)) ) {
|
||||
u3_noun new_right = u3nt(u3k(n_a),
|
||||
u3k(r_l_a),
|
||||
u3k(r_a));
|
||||
|
||||
u3_noun ret = u3nt(u3k(n_l_a),
|
||||
u3k(l_l_a),
|
||||
_rebalance(new_right));
|
||||
u3z(new_right);
|
||||
|
||||
return ret;
|
||||
}
|
||||
else {
|
||||
u3_noun new_left = u3nt(u3k(n_a),
|
||||
u3k(l_a),
|
||||
u3k(l_r_a));
|
||||
|
||||
u3_noun ret = u3nt(u3k(n_r_a),
|
||||
_rebalance(new_left),
|
||||
u3k(r_r_a));
|
||||
u3z(new_left);
|
||||
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
return u3nt(u3k(n_a),
|
||||
u3k(l_a),
|
||||
u3qdb_del(r_a, b));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
u3_noun
|
||||
u3qdb_del(u3_noun a,
|
||||
u3_noun b)
|
||||
{
|
||||
if ( u3_nul == a ) {
|
||||
return u3_nul;
|
||||
}
|
||||
else {
|
||||
u3_noun l_a, n_a, r_a, pn_a, qn_a;
|
||||
|
||||
if ( (c3n == u3r_trel(a, &n_a, &l_a, &r_a)) ||
|
||||
(c3n == u3r_cell(n_a, &pn_a, &qn_a)) )
|
||||
{
|
||||
return u3m_bail(c3__exit);
|
||||
}
|
||||
else if ( c3n == u3r_sing(pn_a, b) ) {
|
||||
if ( c3y == u3qc_gor(b, pn_a) ) {
|
||||
return u3nt(u3k(n_a),
|
||||
u3qdb_del(l_a, b),
|
||||
u3k(r_a));
|
||||
}
|
||||
else {
|
||||
return u3nt(u3k(n_a),
|
||||
u3k(l_a),
|
||||
u3qdb_del(r_a, b));
|
||||
}
|
||||
}
|
||||
else {
|
||||
return _rebalance(a);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
u3_noun
|
||||
u3wdb_del(u3_noun cor)
|
||||
{
|
||||
u3_noun a, b;
|
||||
|
||||
if ( c3n == u3r_mean(cor, u3x_sam, &b,
|
||||
u3x_con_sam, &a, 0) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
}
|
||||
else {
|
||||
u3_noun n = u3qdb_del(a, b);
|
||||
return n;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
u3_noun
|
||||
u3wdb_del(u3_noun cor)
|
||||
{
|
||||
u3_noun a, b;
|
||||
u3x_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0);
|
||||
return u3qdb_del(a, b);
|
||||
}
|
||||
|
@ -5,82 +5,70 @@
|
||||
|
||||
/* internal functions
|
||||
*/
|
||||
static
|
||||
u3_noun _b_dif_join(u3_noun d,
|
||||
u3_noun e)
|
||||
{
|
||||
if ( u3_nul == d ) {
|
||||
return u3k(e);
|
||||
} else if (u3_nul == e) {
|
||||
return u3k(d);
|
||||
} else {
|
||||
u3_noun n_d, l_d, r_d;
|
||||
u3_noun n_e, l_e, r_e;
|
||||
u3_noun p_n_d, q_n_d;
|
||||
u3_noun p_n_e, q_n_e;
|
||||
static u3_noun
|
||||
_b_dif_join(u3_noun d,
|
||||
u3_noun e)
|
||||
{
|
||||
if ( u3_nul == d ) {
|
||||
return u3k(e);
|
||||
}
|
||||
else if ( u3_nul == e ) {
|
||||
return u3k(d);
|
||||
}
|
||||
else {
|
||||
u3_noun n_d, lr_d;
|
||||
u3_noun n_e, lr_e;
|
||||
u3x_cell(d, &n_d, &lr_d);
|
||||
u3x_cell(e, &n_e, &lr_e);
|
||||
|
||||
if ( c3n == u3r_trel(d, &n_d, &l_d, &r_d)
|
||||
|| c3n == u3r_trel(e, &n_e, &l_e, &r_e)
|
||||
|| c3n == u3r_cell(n_d, &p_n_d, &q_n_d)
|
||||
|| c3n == u3r_cell(n_e, &p_n_e, &q_n_e) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
} else {
|
||||
if ( c3y == u3qc_mor(p_n_d, p_n_e) ) {
|
||||
return u3nt(u3k(n_d),
|
||||
u3k(l_d),
|
||||
_b_dif_join(u3k(r_d), u3k(e)));
|
||||
} else {
|
||||
return u3nt(u3k(n_e),
|
||||
_b_dif_join(u3k(d), u3k(l_e)),
|
||||
u3k(r_e));
|
||||
}
|
||||
}
|
||||
if ( c3y == u3qc_mor(u3h(n_d), u3h(n_e)) ) {
|
||||
u3_noun l_d, r_d;
|
||||
u3x_cell(lr_d, &l_d, &r_d);
|
||||
|
||||
return u3nt(u3k(n_d),
|
||||
u3k(l_d),
|
||||
_b_dif_join(u3k(r_d), u3k(e)));
|
||||
}
|
||||
else {
|
||||
u3_noun l_e, r_e;
|
||||
u3x_cell(lr_e, &l_e, &r_e);
|
||||
|
||||
return u3nt(u3k(n_e),
|
||||
_b_dif_join(u3k(d), u3k(l_e)),
|
||||
u3k(r_e));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* functions
|
||||
*/
|
||||
u3_noun u3wdb_dif(u3_noun cor)
|
||||
{
|
||||
u3_noun a, b;
|
||||
if ( c3n == u3r_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
} else {
|
||||
return u3qdb_dif(a, b);
|
||||
}
|
||||
u3_noun
|
||||
u3wdb_dif(u3_noun cor)
|
||||
{
|
||||
u3_noun a, b;
|
||||
u3x_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0);
|
||||
return u3qdb_dif(a, b);
|
||||
}
|
||||
|
||||
u3_noun
|
||||
u3qdb_dif(u3_noun a,
|
||||
u3_noun b)
|
||||
{
|
||||
if ( u3_nul == b ) {
|
||||
return u3k(a);
|
||||
}
|
||||
else {
|
||||
u3_noun n_b, l_b, r_b;
|
||||
u3_noun c, l_c, r_c;
|
||||
u3x_trel(b, &n_b, &l_b, &r_b);
|
||||
|
||||
u3_noun u3qdb_dif(u3_noun a,
|
||||
u3_noun b)
|
||||
{
|
||||
if ( u3_nul == b ) {
|
||||
return u3k(a);
|
||||
} else {
|
||||
u3_noun n_b, l_b, r_b;
|
||||
u3_noun c, l_c, r_c;
|
||||
c = u3qdb_bif(a, n_b);
|
||||
u3x_cell(c, &l_c, &r_c);
|
||||
|
||||
if ( c3n == u3r_trel(b, &n_b, &l_b, &r_b) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
} else {
|
||||
u3_noun d = u3qdb_dif(l_c, l_b);
|
||||
u3_noun e = u3qdb_dif(r_c, r_b);
|
||||
|
||||
c = u3qdb_bif(a, n_b);
|
||||
|
||||
if ( c3n == u3r_cell(c, &l_c, &r_c) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
} else {
|
||||
u3_noun d;
|
||||
u3_noun e;
|
||||
|
||||
d = u3qdb_dif(l_c, l_b);
|
||||
e = u3qdb_dif(r_c, r_b);
|
||||
u3z(c);
|
||||
|
||||
return _b_dif_join(d, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
u3z(c);
|
||||
return _b_dif_join(d, e);
|
||||
}
|
||||
|
||||
/*
|
||||
u3_weak u3kdb_dif(u3_noun a, u3_noun b);
|
||||
*/
|
||||
}
|
||||
|
@ -3,63 +3,41 @@
|
||||
*/
|
||||
#include "all.h"
|
||||
|
||||
|
||||
/* functions
|
||||
*/
|
||||
u3_noun
|
||||
u3qdb_gas(u3_noun a,
|
||||
u3_noun b)
|
||||
{
|
||||
if ( u3_nul == b ) {
|
||||
return u3k(a);
|
||||
}
|
||||
else {
|
||||
if ( c3n == u3du(b) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
} else {
|
||||
u3_noun i_b = u3h(b);
|
||||
u3_noun t_b = u3t(b);
|
||||
|
||||
if ( c3n == u3du(i_b) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
} else {
|
||||
u3_noun pi_b = u3h(i_b);
|
||||
u3_noun qi_b = u3t(i_b);
|
||||
u3_noun c;
|
||||
|
||||
if ( u3_none == (c = u3qdb_put(a, pi_b, qi_b)) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
} else {
|
||||
u3_noun d = u3qdb_gas(c, t_b);
|
||||
|
||||
u3z(c);
|
||||
return d;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
u3_noun
|
||||
u3qdb_gas(u3_noun a,
|
||||
u3_noun b)
|
||||
{
|
||||
if ( u3_nul == b ) {
|
||||
return u3k(a);
|
||||
}
|
||||
u3_noun
|
||||
u3wdb_gas(u3_noun cor)
|
||||
{
|
||||
u3_noun a, b;
|
||||
else {
|
||||
u3_noun i_b, t_b,
|
||||
pi_b, qi_b;
|
||||
u3x_cell(b, &i_b, &t_b);
|
||||
u3x_cell(i_b, &pi_b, &qi_b);
|
||||
|
||||
if ( c3n == u3r_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
} else {
|
||||
return u3qdb_gas(a, b);
|
||||
}
|
||||
u3_noun c = u3qdb_put(a, pi_b, qi_b);
|
||||
u3_noun d = u3qdb_gas(c, t_b);
|
||||
u3z(c);
|
||||
return d;
|
||||
}
|
||||
u3_noun
|
||||
u3kdb_gas(u3_noun a,
|
||||
u3_noun b)
|
||||
{
|
||||
u3_weak c = u3qdb_gas(a, b);
|
||||
}
|
||||
|
||||
u3z(a); u3z(b);
|
||||
if ( u3_none == c ) {
|
||||
return u3m_bail(c3__exit);
|
||||
}
|
||||
else return c;
|
||||
}
|
||||
u3_noun
|
||||
u3wdb_gas(u3_noun cor)
|
||||
{
|
||||
u3_noun a, b;
|
||||
u3x_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0);
|
||||
return u3qdb_gas(a, b);
|
||||
}
|
||||
|
||||
u3_noun
|
||||
u3kdb_gas(u3_noun a,
|
||||
u3_noun b)
|
||||
{
|
||||
u3_noun c = u3qdb_gas(a, b);
|
||||
u3z(a); u3z(b);
|
||||
return c;
|
||||
}
|
||||
|
@ -3,75 +3,60 @@
|
||||
*/
|
||||
#include "all.h"
|
||||
|
||||
|
||||
/* functions
|
||||
*/
|
||||
u3_noun
|
||||
u3qdb_get(u3_noun a,
|
||||
u3_noun b)
|
||||
{
|
||||
if ( u3_nul == a ) {
|
||||
return u3_nul;
|
||||
u3_noun
|
||||
u3qdb_get(u3_noun a,
|
||||
u3_noun b)
|
||||
{
|
||||
if ( u3_nul == a ) {
|
||||
return u3_nul;
|
||||
}
|
||||
else {
|
||||
u3_noun n_a, lr_a;
|
||||
u3_noun pn_a, qn_a;
|
||||
u3x_cell(a, &n_a, &lr_a);
|
||||
u3x_cell(n_a, &pn_a, &qn_a);
|
||||
|
||||
if ( (c3y == u3r_sing(b, pn_a)) ) {
|
||||
return u3nc(u3_nul, u3k(qn_a));
|
||||
}
|
||||
else {
|
||||
u3_noun l_a, n_a, r_a;
|
||||
u3_noun pn_a, qn_a;
|
||||
|
||||
if ( (c3n == u3r_trel(a, &n_a, &l_a, &r_a)) ||
|
||||
(c3n == u3r_cell(n_a, &pn_a, &qn_a) ) )
|
||||
{
|
||||
return u3m_bail(c3__exit);
|
||||
}
|
||||
else {
|
||||
if ( (c3y == u3r_sing(b, pn_a)) ) {
|
||||
return u3nc(u3_nul, u3k(qn_a));
|
||||
}
|
||||
else {
|
||||
if ( c3y == u3qc_gor(b, pn_a) ) {
|
||||
return u3qdb_get(l_a, b);
|
||||
}
|
||||
else return u3qdb_get(r_a, b);
|
||||
}
|
||||
}
|
||||
return ( c3y == u3qc_gor(b, pn_a) ) ? u3qdb_get(u3h(lr_a), b)
|
||||
: u3qdb_get(u3t(lr_a), b);
|
||||
}
|
||||
}
|
||||
u3_noun
|
||||
u3wdb_get(u3_noun cor)
|
||||
{
|
||||
u3_noun a, b;
|
||||
}
|
||||
|
||||
if ( c3n == u3r_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
} else {
|
||||
return u3qdb_get(a, b);
|
||||
}
|
||||
u3_noun
|
||||
u3wdb_get(u3_noun cor)
|
||||
{
|
||||
u3_noun a, b;
|
||||
u3x_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0);
|
||||
return u3qdb_get(a, b);
|
||||
}
|
||||
|
||||
u3_weak
|
||||
u3kdb_get(u3_noun a,
|
||||
u3_noun b)
|
||||
{
|
||||
u3_noun c = u3qdb_get(a, b);
|
||||
u3z(a); u3z(b);
|
||||
|
||||
if ( c3n == u3r_du(c) ) {
|
||||
u3z(c);
|
||||
return u3_none;
|
||||
}
|
||||
u3_weak
|
||||
u3kdb_get(u3_noun a,
|
||||
u3_noun b)
|
||||
{
|
||||
u3_noun c = u3qdb_get(a, b);
|
||||
|
||||
u3z(a); u3z(b);
|
||||
if ( c3n == u3r_du(c) ) {
|
||||
u3z(c);
|
||||
return u3_none;
|
||||
} else {
|
||||
u3_noun pro = u3k(u3t(c));
|
||||
|
||||
u3z(c);
|
||||
return pro;
|
||||
}
|
||||
}
|
||||
u3_noun
|
||||
u3kdb_got(u3_noun a,
|
||||
u3_noun b)
|
||||
{
|
||||
u3_weak c = u3kdb_get(a, b);
|
||||
|
||||
if ( u3_none == c ) {
|
||||
return u3m_bail(c3__exit);
|
||||
}
|
||||
else return c;
|
||||
else {
|
||||
u3_noun pro = u3k(u3t(c));
|
||||
u3z(c);
|
||||
return pro;
|
||||
}
|
||||
}
|
||||
|
||||
u3_noun
|
||||
u3kdb_got(u3_noun a,
|
||||
u3_noun b)
|
||||
{
|
||||
return u3x_good(u3kdb_get(a, b));
|
||||
}
|
||||
|
@ -3,59 +3,44 @@
|
||||
*/
|
||||
#include "all.h"
|
||||
|
||||
|
||||
/* functions
|
||||
*/
|
||||
u3_noun
|
||||
u3qdb_has(u3_noun a,
|
||||
u3_noun b)
|
||||
{
|
||||
if ( u3_nul == a ) {
|
||||
return c3n;
|
||||
u3_noun
|
||||
u3qdb_has(u3_noun a,
|
||||
u3_noun b)
|
||||
{
|
||||
if ( u3_nul == a ) {
|
||||
return c3n;
|
||||
}
|
||||
else {
|
||||
u3_noun n_a, lr_a;
|
||||
u3_noun pn_a;
|
||||
u3x_cell(a, &n_a, &lr_a);
|
||||
u3x_cell(n_a, &pn_a, 0);
|
||||
|
||||
if ( (c3y == u3r_sing(b, pn_a)) ) {
|
||||
return c3y;
|
||||
}
|
||||
else {
|
||||
u3_noun l_a, n_a, r_a;
|
||||
u3_noun pn_a, qn_a;
|
||||
|
||||
if ( (c3n == u3r_trel(a, &n_a, &l_a, &r_a)) ||
|
||||
(c3n == u3r_cell(n_a, &pn_a, &qn_a)) )
|
||||
{
|
||||
return u3m_bail(c3__exit);
|
||||
}
|
||||
else {
|
||||
if ( (c3y == u3r_sing(b, pn_a)) ) {
|
||||
return c3y;
|
||||
}
|
||||
else {
|
||||
if ( c3y == u3qc_gor(b, pn_a) ) {
|
||||
return u3qdb_has(l_a, b);
|
||||
}
|
||||
else return u3qdb_has(r_a, b);
|
||||
}
|
||||
}
|
||||
return ( c3y == u3qc_gor(b, pn_a) ) ? u3qdb_has(u3h(lr_a), b)
|
||||
: u3qdb_has(u3t(lr_a), b);
|
||||
}
|
||||
}
|
||||
u3_noun
|
||||
u3wdb_has(u3_noun cor)
|
||||
{
|
||||
u3_noun a, b;
|
||||
}
|
||||
|
||||
if ( c3n == u3r_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
} else {
|
||||
return u3qdb_has(a, b);
|
||||
}
|
||||
}
|
||||
u3_noun
|
||||
u3kdb_has(u3_noun a,
|
||||
u3_noun b)
|
||||
{
|
||||
u3_weak c = u3qdb_has(a, b);
|
||||
|
||||
u3z(a); u3z(b);
|
||||
if ( u3_none == c ) {
|
||||
return u3m_bail(c3__exit);
|
||||
}
|
||||
else return c;
|
||||
}
|
||||
u3_noun
|
||||
u3wdb_has(u3_noun cor)
|
||||
{
|
||||
u3_noun a, b;
|
||||
u3x_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0);
|
||||
return u3qdb_has(a, b);
|
||||
}
|
||||
|
||||
u3_noun
|
||||
u3kdb_has(u3_noun a,
|
||||
u3_noun b)
|
||||
{
|
||||
u3_noun c = u3qdb_has(a, b);
|
||||
u3z(a); u3z(b);
|
||||
return c;
|
||||
}
|
||||
|
@ -5,101 +5,81 @@
|
||||
*/
|
||||
#include "all.h"
|
||||
|
||||
|
||||
/* functions
|
||||
*/
|
||||
u3_noun
|
||||
u3qdb_int(u3_noun a,
|
||||
u3_noun b)
|
||||
{
|
||||
if ( u3_nul == a ) {
|
||||
return u3k(u3_nul);
|
||||
}
|
||||
else if ( u3_nul == b ) {
|
||||
return u3k(u3_nul);
|
||||
}
|
||||
else {
|
||||
u3_noun l_a, n_a, r_a, lr_a, p_n_a, q_n_a;
|
||||
u3_noun l_b, n_b, r_b, lr_b, p_n_b, q_n_b;
|
||||
u3_noun
|
||||
u3qdb_int(u3_noun a,
|
||||
u3_noun b)
|
||||
{
|
||||
if ( u3_nul == a ) {
|
||||
return u3k(u3_nul);
|
||||
}
|
||||
else if ( u3_nul == b ) {
|
||||
return u3k(u3_nul);
|
||||
}
|
||||
else {
|
||||
u3_noun n_a, l_a, r_a;
|
||||
u3_noun n_b, l_b, r_b;
|
||||
u3_noun p_n_a, q_n_a;
|
||||
u3_noun p_n_b, q_n_b;
|
||||
u3x_trel(a, &n_a, &l_a, &r_a);
|
||||
u3x_trel(b, &n_b, &l_b, &r_b);
|
||||
u3x_cell(n_a, &p_n_a, &q_n_a);
|
||||
u3x_cell(n_b, &p_n_b, &q_n_b);
|
||||
|
||||
if ( (c3n == u3r_cell(a, &n_a, &lr_a)) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
if ( c3y == u3qc_mor(p_n_a, p_n_b) ) {
|
||||
if ( c3y == u3r_sing(p_n_a, p_n_b) ) {
|
||||
return u3nt(u3k(n_b),
|
||||
u3qdb_int(u3k(l_a), u3k(l_b)),
|
||||
u3qdb_int(u3k(r_a), u3k(r_b)));
|
||||
}
|
||||
else if ( (c3n == u3r_cell(b, &n_b, &lr_b)) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
}
|
||||
else if ( c3n == u3r_cell(lr_a, &l_a, &r_a) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
}
|
||||
else if ( c3n == u3r_cell(lr_b, &l_b, &r_b) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
}
|
||||
else if ( c3n == u3r_cell(n_a, &p_n_a, &q_n_a) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
}
|
||||
else if ( c3n == u3r_cell(n_b, &p_n_b, &q_n_b) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
}
|
||||
else if ( c3y == u3qc_mor(p_n_a, p_n_b) ) {
|
||||
if ( c3y == u3r_sing(p_n_a, p_n_b) ) {
|
||||
return u3nt(
|
||||
u3k(n_b),
|
||||
u3qdb_int(u3k(l_a), u3k(l_b)),
|
||||
u3qdb_int(u3k(r_a), u3k(r_b)));
|
||||
}
|
||||
else if ( c3y == u3qc_gor(p_n_b, p_n_a) ) {
|
||||
return u3qdb_uni(
|
||||
u3qdb_int(u3k(l_a),
|
||||
u3nt(u3k(n_b),
|
||||
u3k(l_b),
|
||||
u3k(u3_nul))),
|
||||
u3qdb_int(u3k(a),
|
||||
u3k(r_b)));
|
||||
}
|
||||
else {
|
||||
return u3qdb_uni(
|
||||
u3qdb_int(u3k(r_a),
|
||||
u3nt(u3k(n_b),
|
||||
u3k(u3_nul),
|
||||
u3k(r_b))),
|
||||
u3qdb_int(u3k(a),
|
||||
u3k(l_b)));
|
||||
}
|
||||
}
|
||||
else if ( c3y == u3r_sing(p_n_b, p_n_a) ) {
|
||||
return u3nt(
|
||||
u3k(n_b),
|
||||
u3qdb_int(u3k(l_b), u3k(l_a)),
|
||||
u3qdb_int(u3k(r_b), u3k(r_a)));
|
||||
}
|
||||
else if ( c3y == u3qc_gor(p_n_a, p_n_b) ) {
|
||||
return u3qdb_uni(
|
||||
u3qdb_int(u3k(l_b),
|
||||
u3nt(u3k(n_a),
|
||||
u3k(l_a),
|
||||
u3k(u3_nul))),
|
||||
u3qdb_int(u3k(a),
|
||||
u3k(r_a)));
|
||||
else if ( c3y == u3qc_gor(p_n_b, p_n_a) ) {
|
||||
return u3qdb_uni(u3qdb_int(u3k(l_a),
|
||||
u3nt(u3k(n_b),
|
||||
u3k(l_b),
|
||||
u3k(u3_nul))),
|
||||
u3qdb_int(u3k(a),
|
||||
u3k(r_b)));
|
||||
}
|
||||
else {
|
||||
return u3qdb_uni(
|
||||
u3qdb_int(u3k(r_b),
|
||||
u3nt(u3k(n_a),
|
||||
u3k(u3_nul),
|
||||
u3k(r_a))),
|
||||
u3qdb_int(u3k(a),
|
||||
u3k(l_a)));
|
||||
return u3qdb_uni(u3qdb_int(u3k(r_a),
|
||||
u3nt(u3k(n_b),
|
||||
u3k(u3_nul),
|
||||
u3k(r_b))),
|
||||
u3qdb_int(u3k(a),
|
||||
u3k(l_b)));
|
||||
}
|
||||
}
|
||||
}
|
||||
u3_noun
|
||||
u3wdb_int(u3_noun cor)
|
||||
{
|
||||
u3_noun a, b;
|
||||
|
||||
if ( c3n == u3r_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
} else {
|
||||
return u3qdb_int(a, b);
|
||||
else if ( c3y == u3r_sing(p_n_b, p_n_a) ) {
|
||||
return u3nt(u3k(n_b),
|
||||
u3qdb_int(u3k(l_b), u3k(l_a)),
|
||||
u3qdb_int(u3k(r_b), u3k(r_a)));
|
||||
}
|
||||
else if ( c3y == u3qc_gor(p_n_a, p_n_b) ) {
|
||||
return u3qdb_uni(u3qdb_int(u3k(l_b),
|
||||
u3nt(u3k(n_a),
|
||||
u3k(l_a),
|
||||
u3k(u3_nul))),
|
||||
u3qdb_int(u3k(a),
|
||||
u3k(r_a)));
|
||||
}
|
||||
else {
|
||||
return u3qdb_uni(u3qdb_int(u3k(r_b),
|
||||
u3nt(u3k(n_a),
|
||||
u3k(u3_nul),
|
||||
u3k(r_a))),
|
||||
u3qdb_int(u3k(a),
|
||||
u3k(l_a)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// XX disabled in tree.c, reference counts presumed wrong
|
||||
//
|
||||
u3_noun
|
||||
u3wdb_int(u3_noun cor)
|
||||
{
|
||||
u3_noun a, b;
|
||||
u3x_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0);
|
||||
return u3qdb_int(a, b);
|
||||
}
|
||||
|
@ -3,54 +3,44 @@
|
||||
*/
|
||||
#include "all.h"
|
||||
|
||||
|
||||
/* functions
|
||||
*/
|
||||
u3_noun
|
||||
u3qdb_jab(u3_noun a,
|
||||
u3_noun key,
|
||||
u3_noun fun)
|
||||
{
|
||||
if ( u3_nul == a ) {
|
||||
return u3m_bail(c3__exit);
|
||||
u3_noun
|
||||
u3qdb_jab(u3_noun a,
|
||||
u3_noun key,
|
||||
u3_noun fun)
|
||||
{
|
||||
if ( u3_nul == a ) {
|
||||
return u3m_bail(c3__exit);
|
||||
}
|
||||
else {
|
||||
u3_noun n_a, lr_a;
|
||||
u3_noun pn_a, qn_a;
|
||||
u3x_cell(a, &n_a, &lr_a);
|
||||
u3x_cell(n_a, &pn_a, &qn_a);
|
||||
|
||||
if ( (c3y == u3r_sing(key, pn_a)) ) {
|
||||
u3_noun value = u3n_slam_on(u3k(fun), u3k(qn_a));
|
||||
return u3nc(u3nc(u3k(pn_a), value), u3k(u3t(a)));
|
||||
}
|
||||
else {
|
||||
u3_noun l_a, n_a, r_a;
|
||||
u3_noun pn_a, qn_a;
|
||||
u3_noun l_a, r_a;
|
||||
u3x_cell(lr_a, &l_a, &r_a);
|
||||
|
||||
if ( (c3n == u3r_trel(a, &n_a, &l_a, &r_a)) ||
|
||||
(c3n == u3r_cell(n_a, &pn_a, &qn_a) ) )
|
||||
{
|
||||
return u3m_bail(c3__exit);
|
||||
}
|
||||
else {
|
||||
if ( (c3y == u3r_sing(key, pn_a)) ) {
|
||||
u3_noun value = u3n_slam_on(u3k(fun), u3k(qn_a));
|
||||
return u3nc(u3nc(u3k(pn_a), value), u3k(u3t(a)));
|
||||
}
|
||||
else {
|
||||
if ( c3y == u3qc_gor(key, pn_a) ) {
|
||||
return u3nt(u3k(n_a), u3qdb_jab(l_a, key, fun), u3k(r_a));
|
||||
}
|
||||
else {
|
||||
return u3nt(u3k(n_a), u3k(l_a), u3qdb_jab(r_a, key, fun));
|
||||
}
|
||||
}
|
||||
}
|
||||
return ( c3y == u3qc_gor(key, pn_a) )
|
||||
? u3nt(u3k(n_a), u3qdb_jab(l_a, key, fun), u3k(r_a))
|
||||
: u3nt(u3k(n_a), u3k(l_a), u3qdb_jab(r_a, key, fun));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
u3_noun
|
||||
u3wdb_jab(u3_noun cor)
|
||||
{
|
||||
u3_noun a, key, fun;
|
||||
u3_noun
|
||||
u3wdb_jab(u3_noun cor)
|
||||
{
|
||||
u3_noun a, key, fun;
|
||||
u3x_mean(cor, u3x_sam_2, &key,
|
||||
u3x_sam_3, &fun,
|
||||
u3x_con_sam, &a, 0);
|
||||
|
||||
if ( c3n == u3r_mean(cor, u3x_sam_2, &key,
|
||||
u3x_sam_3, &fun,
|
||||
u3x_con_sam, &a, 0) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
} else {
|
||||
u3_noun n = u3qdb_jab(a, key, fun);
|
||||
return n;
|
||||
}
|
||||
}
|
||||
return u3qdb_jab(a, key, fun);
|
||||
}
|
||||
|
@ -3,115 +3,99 @@
|
||||
*/
|
||||
#include "all.h"
|
||||
|
||||
|
||||
/* functions
|
||||
*/
|
||||
u3_noun
|
||||
u3qdb_put(u3_noun a,
|
||||
u3_noun b,
|
||||
u3_noun c)
|
||||
{
|
||||
if ( u3_nul == a ) {
|
||||
return u3nt(
|
||||
u3nc(u3k(b),
|
||||
u3k(c)),
|
||||
u3_nul,
|
||||
u3_nul);
|
||||
}
|
||||
else {
|
||||
u3_noun l_a, n_a, r_a, pn_a, qn_a;
|
||||
u3_noun d, l_d, n_d, r_d;
|
||||
u3_noun
|
||||
u3qdb_put(u3_noun a,
|
||||
u3_noun b,
|
||||
u3_noun c)
|
||||
{
|
||||
if ( u3_nul == a ) {
|
||||
return u3nt(u3nc(u3k(b), u3k(c)),
|
||||
u3_nul,
|
||||
u3_nul);
|
||||
}
|
||||
else {
|
||||
u3_noun n_a, l_a, r_a;
|
||||
u3_noun pn_a, qn_a;
|
||||
u3x_trel(a, &n_a, &l_a, &r_a);
|
||||
u3x_cell(n_a, &pn_a, &qn_a);
|
||||
|
||||
if ( (c3n == u3r_trel(a, &n_a, &l_a, &r_a)) ||
|
||||
(c3n == u3r_cell(n_a, &pn_a, &qn_a)) )
|
||||
{
|
||||
return u3m_bail(c3__exit);
|
||||
if ( c3y == u3r_sing(pn_a, b) ) {
|
||||
if ( c3y == u3r_sing(qn_a, c) ) {
|
||||
return u3k(a);
|
||||
}
|
||||
else if ( c3y == u3r_sing(pn_a, b) ) {
|
||||
if ( c3y == u3r_sing(qn_a, c) ) {
|
||||
return u3k(a);
|
||||
} else {
|
||||
return u3nt
|
||||
(u3nc(u3k(b), u3k(c)),
|
||||
else {
|
||||
return u3nt(u3nc(u3k(b), u3k(c)),
|
||||
u3k(l_a),
|
||||
u3k(r_a));
|
||||
}
|
||||
}
|
||||
else {
|
||||
u3_noun d, n_d, l_d, r_d;
|
||||
|
||||
if ( c3y == u3qc_gor(b, pn_a) ) {
|
||||
d = u3qdb_put(l_a, b, c);
|
||||
|
||||
if ( c3y == u3qc_mor(pn_a, u3h(u3h(d))) ) {
|
||||
return u3nt(u3k(n_a),
|
||||
d,
|
||||
u3k(r_a));
|
||||
}
|
||||
else {
|
||||
u3r_trel(d, &n_d, &l_d, &r_d);
|
||||
|
||||
u3_noun e = u3nt(u3k(n_d),
|
||||
u3k(l_d),
|
||||
u3nt(u3k(n_a),
|
||||
u3k(r_d),
|
||||
u3k(r_a)));
|
||||
|
||||
u3z(d);
|
||||
return e;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if ( c3y == u3qc_gor(b, pn_a) ) {
|
||||
d = u3qdb_put(l_a, b, c);
|
||||
d = u3qdb_put(r_a, b, c);
|
||||
|
||||
if ( c3y == u3qc_mor(pn_a, u3h(u3h(d))) ) {
|
||||
return u3nt(u3k(n_a),
|
||||
d,
|
||||
u3k(r_a));
|
||||
}
|
||||
else {
|
||||
u3r_trel(d, &n_d, &l_d, &r_d);
|
||||
{
|
||||
u3_noun e = u3nt
|
||||
(u3k(n_d),
|
||||
u3k(l_d),
|
||||
u3nt(u3k(n_a),
|
||||
u3k(r_d),
|
||||
u3k(r_a)));
|
||||
|
||||
u3z(d);
|
||||
return e;
|
||||
}
|
||||
}
|
||||
if ( c3y == u3qc_mor(pn_a, u3h(u3h(d))) ) {
|
||||
return u3nt(u3k(n_a),
|
||||
u3k(l_a),
|
||||
d);
|
||||
}
|
||||
else {
|
||||
d = u3qdb_put(r_a, b, c);
|
||||
u3r_trel(d, &n_d, &l_d, &r_d);
|
||||
|
||||
if ( c3y == u3qc_mor(pn_a, u3h(u3h(d))) ) {
|
||||
return u3nt(u3k(n_a),
|
||||
u3k(l_a),
|
||||
d);
|
||||
}
|
||||
else {
|
||||
u3r_trel(d, &n_d, &l_d, &r_d);
|
||||
{
|
||||
u3_noun e = u3nt
|
||||
(u3k(n_d),
|
||||
u3nt(u3k(n_a),
|
||||
u3k(l_a),
|
||||
u3k(l_d)),
|
||||
u3k(r_d));
|
||||
u3_noun e = u3nt(u3k(n_d),
|
||||
u3nt(u3k(n_a),
|
||||
u3k(l_a),
|
||||
u3k(l_d)),
|
||||
u3k(r_d));
|
||||
|
||||
u3z(d);
|
||||
return e;
|
||||
}
|
||||
}
|
||||
u3z(d);
|
||||
return e;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
u3_noun
|
||||
u3wdb_put(u3_noun cor)
|
||||
{
|
||||
u3_noun a, b, c;
|
||||
}
|
||||
|
||||
if ( c3n == u3r_mean(cor, u3x_sam_2, &b,
|
||||
u3x_sam_3, &c,
|
||||
u3x_con_sam, &a, 0) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
} else {
|
||||
return u3qdb_put(a, b, c);
|
||||
}
|
||||
}
|
||||
u3_weak
|
||||
u3kdb_put(u3_noun a,
|
||||
u3_noun b,
|
||||
u3_noun c)
|
||||
{
|
||||
// Bizarre asymmetry in old jets.
|
||||
//
|
||||
// (Mysterious comment in old glue code.)
|
||||
//
|
||||
u3_noun pro = u3qdb_put(a, b, c);
|
||||
|
||||
u3z(a); u3z(b); u3z(c);
|
||||
return pro;
|
||||
}
|
||||
u3_noun
|
||||
u3wdb_put(u3_noun cor)
|
||||
{
|
||||
u3_noun a, b, c;
|
||||
u3x_mean(cor, u3x_sam_2, &b,
|
||||
u3x_sam_3, &c,
|
||||
u3x_con_sam, &a, 0);
|
||||
return u3qdb_put(a, b, c);
|
||||
}
|
||||
|
||||
u3_noun
|
||||
u3kdb_put(u3_noun a,
|
||||
u3_noun b,
|
||||
u3_noun c)
|
||||
{
|
||||
u3_noun pro = u3qdb_put(a, b, c);
|
||||
u3z(a); u3z(b); u3z(c);
|
||||
return pro;
|
||||
}
|
||||
|
@ -5,105 +5,91 @@
|
||||
*/
|
||||
#include "all.h"
|
||||
|
||||
|
||||
/* functions
|
||||
*/
|
||||
u3_noun
|
||||
u3qdb_uni(u3_noun a,
|
||||
u3_noun b)
|
||||
{
|
||||
if ( u3_nul == a ) {
|
||||
return u3k(b);
|
||||
}
|
||||
else if ( u3_nul == b ) {
|
||||
return u3k(a);
|
||||
}
|
||||
else {
|
||||
u3_noun l_a, n_a, r_a, lr_a, p_n_a, q_n_a;
|
||||
u3_noun l_b, n_b, r_b, lr_b, p_n_b, q_n_b;
|
||||
u3_noun
|
||||
u3qdb_uni(u3_noun a,
|
||||
u3_noun b)
|
||||
{
|
||||
if ( u3_nul == a ) {
|
||||
return u3k(b);
|
||||
}
|
||||
else if ( u3_nul == b ) {
|
||||
return u3k(a);
|
||||
}
|
||||
else {
|
||||
u3_noun n_a, l_a, r_a;
|
||||
u3_noun n_b, l_b, r_b;
|
||||
u3_noun p_n_a, q_n_a;
|
||||
u3_noun p_n_b, q_n_b;
|
||||
u3x_trel(a, &n_a, &l_a, &r_a);
|
||||
u3x_trel(b, &n_b, &l_b, &r_b);
|
||||
u3x_cell(n_a, &p_n_a, &q_n_a);
|
||||
u3x_cell(n_b, &p_n_b, &q_n_b);
|
||||
|
||||
if ( (c3n == u3r_cell(a, &n_a, &lr_a)) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
}
|
||||
else if ( (c3n == u3r_cell(b, &n_b, &lr_b)) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
}
|
||||
else if ( (c3n == u3r_cell(n_a, &p_n_a, &q_n_a)) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
}
|
||||
else if ( (c3n == u3r_cell(n_b, &p_n_b, &q_n_b)) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
}
|
||||
else if ( c3n == u3r_cell(lr_a, &l_a, &r_a) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
}
|
||||
else if ( c3n == u3r_cell(lr_b, &l_b, &r_b) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
}
|
||||
else if ( c3y == u3qc_mor(p_n_a, p_n_b) ) {
|
||||
if ( c3y == u3r_sing(p_n_a, p_n_b) ) {
|
||||
return u3nt(u3k(n_b),
|
||||
u3qdb_uni(u3k(l_a),
|
||||
u3k(l_b)),
|
||||
u3qdb_uni(u3k(r_a),
|
||||
u3k(r_b)));
|
||||
}
|
||||
else if ( c3y == u3qc_gor(p_n_b, p_n_a) ) {
|
||||
return u3qdb_uni(
|
||||
u3nt(u3k(n_a),
|
||||
u3qdb_uni(u3k(l_a),
|
||||
u3nt(u3k(n_b),
|
||||
u3k(l_b),
|
||||
u3k(u3_nul))),
|
||||
u3k(r_a)),
|
||||
u3k(r_b));
|
||||
}
|
||||
else {
|
||||
return u3qdb_uni(
|
||||
u3nt(u3k(n_a),
|
||||
u3k(l_a),
|
||||
u3qdb_uni(u3k(r_a),
|
||||
u3nt(u3k(n_b),
|
||||
u3k(u3_nul),
|
||||
u3k(r_b)))),
|
||||
u3k(l_b));
|
||||
}
|
||||
}
|
||||
else if ( c3y == u3r_sing(p_n_b, p_n_a) ) {
|
||||
if ( c3y == u3qc_mor(p_n_a, p_n_b) ) {
|
||||
if ( c3y == u3r_sing(p_n_a, p_n_b) ) {
|
||||
return u3nt(u3k(n_b),
|
||||
u3qdb_uni(u3k(r_b), u3k(r_a)),
|
||||
u3qdb_uni(u3k(l_b), u3k(l_a)));
|
||||
}
|
||||
else if ( c3y == u3qc_gor(p_n_a, p_n_b) ) {
|
||||
return u3qdb_uni(
|
||||
u3k(r_a),
|
||||
u3nt(u3k(n_b),
|
||||
u3qdb_uni(u3nt(u3k(n_a),
|
||||
u3k(l_a),
|
||||
u3k(u3_nul)),
|
||||
u3qdb_uni(u3k(l_a),
|
||||
u3k(l_b)),
|
||||
u3k(r_b)));
|
||||
u3qdb_uni(u3k(r_a),
|
||||
u3k(r_b)));
|
||||
}
|
||||
else if ( c3y == u3qc_gor(p_n_b, p_n_a) ) {
|
||||
return u3qdb_uni(
|
||||
u3nt(u3k(n_a),
|
||||
u3qdb_uni(u3k(l_a),
|
||||
u3nt(u3k(n_b),
|
||||
u3k(l_b),
|
||||
u3k(u3_nul))),
|
||||
u3k(r_a)),
|
||||
u3k(r_b));
|
||||
}
|
||||
else {
|
||||
return u3qdb_uni(
|
||||
u3k(l_a),
|
||||
u3nt(u3k(n_b),
|
||||
u3k(l_b),
|
||||
u3qdb_uni(u3k(r_b),
|
||||
u3nt(u3k(n_a),
|
||||
u3nt(u3k(n_a),
|
||||
u3k(l_a),
|
||||
u3qdb_uni(u3k(r_a),
|
||||
u3nt(u3k(n_b),
|
||||
u3k(u3_nul),
|
||||
u3k(r_a)))));
|
||||
u3k(r_b)))),
|
||||
u3k(l_b));
|
||||
}
|
||||
}
|
||||
}
|
||||
u3_noun
|
||||
u3wdb_uni(u3_noun cor)
|
||||
{
|
||||
u3_noun a, b;
|
||||
|
||||
if ( c3n == u3r_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
} else {
|
||||
return u3qdb_uni(a, b);
|
||||
else if ( c3y == u3r_sing(p_n_b, p_n_a) ) {
|
||||
return u3nt(u3k(n_b),
|
||||
u3qdb_uni(u3k(r_b), u3k(r_a)),
|
||||
u3qdb_uni(u3k(l_b), u3k(l_a)));
|
||||
}
|
||||
else if ( c3y == u3qc_gor(p_n_a, p_n_b) ) {
|
||||
return u3qdb_uni(
|
||||
u3k(r_a),
|
||||
u3nt(u3k(n_b),
|
||||
u3qdb_uni(u3nt(u3k(n_a),
|
||||
u3k(l_a),
|
||||
u3k(u3_nul)),
|
||||
u3k(l_b)),
|
||||
u3k(r_b)));
|
||||
}
|
||||
else {
|
||||
return u3qdb_uni(
|
||||
u3k(l_a),
|
||||
u3nt(u3k(n_b),
|
||||
u3k(l_b),
|
||||
u3qdb_uni(u3k(r_b),
|
||||
u3nt(u3k(n_a),
|
||||
u3k(u3_nul),
|
||||
u3k(r_a)))));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// XX disabled in tree.c, reference counts presumed wrong
|
||||
//
|
||||
u3_noun
|
||||
u3wdb_uni(u3_noun cor)
|
||||
{
|
||||
u3_noun a, b;
|
||||
u3x_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0);
|
||||
return u3qdb_uni(a, b);
|
||||
}
|
||||
|
@ -5,72 +5,68 @@
|
||||
|
||||
/* internal functions
|
||||
*/
|
||||
static
|
||||
u3_noun _i_bif_putroot(u3_noun a,
|
||||
u3_noun b)
|
||||
{
|
||||
if ( u3_nul == a) {
|
||||
return u3nt(u3k(b), u3_nul, u3_nul);
|
||||
static u3_noun
|
||||
_i_bif_putroot(u3_noun a,
|
||||
u3_noun b)
|
||||
{
|
||||
if ( u3_nul == a) {
|
||||
return u3nt(u3k(b), u3_nul, u3_nul);
|
||||
}
|
||||
else {
|
||||
u3_noun n_a, lr_a;
|
||||
u3x_cell(a, &n_a, &lr_a);
|
||||
|
||||
if ( c3y == u3r_sing(b, n_a) ) {
|
||||
return u3k(a);
|
||||
}
|
||||
else {
|
||||
u3_noun n_a, l_a, r_a;
|
||||
u3_noun c, n_c, l_c, r_c;
|
||||
u3_noun d;
|
||||
u3_noun l_a, r_a;
|
||||
u3x_cell(lr_a, &l_a, &r_a);
|
||||
|
||||
if ( (c3n == u3r_trel(a, &n_a, &l_a, &r_a)) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
}
|
||||
else if ( c3y == u3r_sing(b, n_a) ) {
|
||||
return u3k(a);
|
||||
if ( c3y == u3qc_gor(b, n_a) ) {
|
||||
c = _i_bif_putroot(l_a, b);
|
||||
u3r_trel(c, &n_c, &l_c, &r_c);
|
||||
d = u3nt(u3k(n_c),
|
||||
u3k(l_c),
|
||||
u3nt(u3k(n_a), u3k(r_c), u3k(r_a)));
|
||||
u3z(c);
|
||||
return d;
|
||||
}
|
||||
else {
|
||||
u3_noun c, n_c, l_c, r_c;
|
||||
u3_noun d;
|
||||
|
||||
if ( c3y == u3qc_gor(b, n_a) ) {
|
||||
c = _i_bif_putroot(l_a, b);
|
||||
u3r_trel(c, &n_c, &l_c, &r_c);
|
||||
d = u3nt(u3k(n_c),
|
||||
u3k(l_c),
|
||||
u3nt(u3k(n_a), u3k(r_c), u3k(r_a)));
|
||||
u3z(c);
|
||||
return d;
|
||||
} else {
|
||||
c = _i_bif_putroot(r_a, b);
|
||||
u3r_trel(c, &n_c, &l_c, &r_c);
|
||||
d = u3nt(u3k(n_c),
|
||||
u3nt(u3k(n_a), u3k(l_a), u3k(l_c)),
|
||||
u3k(r_c));
|
||||
u3z(c);
|
||||
return d;
|
||||
}
|
||||
c = _i_bif_putroot(r_a, b);
|
||||
u3r_trel(c, &n_c, &l_c, &r_c);
|
||||
d = u3nt(u3k(n_c),
|
||||
u3nt(u3k(n_a), u3k(l_a), u3k(l_c)),
|
||||
u3k(r_c));
|
||||
u3z(c);
|
||||
return d;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* functions
|
||||
*/
|
||||
u3_noun u3wdi_bif(u3_noun cor)
|
||||
{
|
||||
u3_noun a, b;
|
||||
if ( c3n == u3r_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
} else {
|
||||
return u3qdi_bif(a, b);
|
||||
}
|
||||
}
|
||||
u3_noun
|
||||
u3wdi_bif(u3_noun cor)
|
||||
{
|
||||
u3_noun a, b;
|
||||
u3x_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0);
|
||||
return u3qdi_bif(a, b);
|
||||
}
|
||||
|
||||
u3_noun u3qdi_bif(u3_noun a,
|
||||
u3_noun b)
|
||||
{
|
||||
u3_noun c, n_c, l_c, r_c;
|
||||
u3_noun d;
|
||||
u3_noun
|
||||
u3qdi_bif(u3_noun a,
|
||||
u3_noun b)
|
||||
{
|
||||
u3_noun c, n_c, l_c, r_c;
|
||||
u3_noun d;
|
||||
|
||||
c = _i_bif_putroot(a, b);
|
||||
u3r_trel(c, &n_c, &l_c, &r_c);
|
||||
d = u3nc(u3k(l_c), u3k(r_c));
|
||||
u3z(c);
|
||||
return d;
|
||||
}
|
||||
|
||||
/*
|
||||
u3_weak u3kdi_bif(u3_noun a, u3_noun b);
|
||||
*/
|
||||
c = _i_bif_putroot(a, b);
|
||||
u3r_trel(c, &n_c, &l_c, &r_c);
|
||||
d = u3nc(u3k(l_c), u3k(r_c));
|
||||
u3z(c);
|
||||
return d;
|
||||
}
|
||||
|
@ -5,101 +5,84 @@
|
||||
|
||||
/* functions
|
||||
*/
|
||||
static u3_noun
|
||||
_rebalance(u3_noun a)
|
||||
{
|
||||
static u3_noun
|
||||
_rebalance(u3_noun a)
|
||||
{
|
||||
u3_noun l_a, n_a, r_a;
|
||||
u3x_trel(a, &n_a, &l_a, &r_a);
|
||||
|
||||
if ( u3_nul == l_a) {
|
||||
return u3k(r_a);
|
||||
}
|
||||
else if ( u3_nul == r_a) {
|
||||
return u3k(l_a);
|
||||
}
|
||||
else {
|
||||
u3_noun n_l_a, l_l_a, r_l_a;
|
||||
u3_noun n_r_a, l_r_a, r_r_a;
|
||||
u3x_trel(l_a, &n_l_a, &l_l_a, &r_l_a);
|
||||
u3x_trel(r_a, &n_r_a, &l_r_a, &r_r_a);
|
||||
|
||||
if ( c3y == u3qc_mor(n_l_a, n_r_a) ) {
|
||||
u3_noun new_right = u3nt(u3k(n_a),
|
||||
u3k(r_l_a),
|
||||
u3k(r_a));
|
||||
|
||||
u3_noun ret = u3nt(u3k(n_l_a),
|
||||
u3k(l_l_a),
|
||||
_rebalance(new_right));
|
||||
u3z(new_right);
|
||||
|
||||
return ret;
|
||||
}
|
||||
else {
|
||||
u3_noun new_left = u3nt(u3k(n_a),
|
||||
u3k(l_a),
|
||||
u3k(l_r_a));
|
||||
|
||||
u3_noun ret = u3nt(u3k(n_r_a),
|
||||
_rebalance(new_left),
|
||||
u3k(r_r_a));
|
||||
u3z(new_left);
|
||||
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
u3_noun
|
||||
u3qdi_del(u3_noun a,
|
||||
u3_noun b)
|
||||
{
|
||||
if ( u3_nul == a ) {
|
||||
return u3_nul;
|
||||
}
|
||||
else {
|
||||
u3_noun l_a, n_a, r_a;
|
||||
u3x_trel(a, &n_a, &l_a, &r_a);
|
||||
|
||||
if ( c3n == u3r_trel(a, &n_a, &l_a, &r_a) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
if ( c3y == u3r_sing(n_a, b) ) {
|
||||
return _rebalance(a);
|
||||
}
|
||||
else {
|
||||
if ( u3_nul == l_a) {
|
||||
return u3k(r_a);
|
||||
}
|
||||
else if ( u3_nul == r_a) {
|
||||
return u3k(l_a);
|
||||
if ( c3y == u3qc_gor(b, n_a) ) {
|
||||
return u3nt(u3k(n_a),
|
||||
u3qdi_del(l_a, b),
|
||||
u3k(r_a));
|
||||
}
|
||||
else {
|
||||
u3_noun n_l_a, l_l_a, r_l_a;
|
||||
u3_noun n_r_a, l_r_a, r_r_a;
|
||||
|
||||
if ( (c3n == u3r_trel(l_a, &n_l_a, &l_l_a, &r_l_a) ) ||
|
||||
(c3n == u3r_trel(r_a, &n_r_a, &l_r_a, &r_r_a) ) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
}
|
||||
else {
|
||||
if ( c3y == u3qc_mor(n_l_a, n_r_a) ) {
|
||||
u3_noun new_right = u3nt(u3k(n_a),
|
||||
u3k(r_l_a),
|
||||
u3k(r_a));
|
||||
|
||||
u3_noun ret = u3nt(u3k(n_l_a),
|
||||
u3k(l_l_a),
|
||||
_rebalance(new_right));
|
||||
u3z(new_right);
|
||||
|
||||
return ret;
|
||||
}
|
||||
else {
|
||||
u3_noun new_left = u3nt(u3k(n_a),
|
||||
u3k(l_a),
|
||||
u3k(l_r_a));
|
||||
|
||||
u3_noun ret = u3nt(u3k(n_r_a),
|
||||
_rebalance(new_left),
|
||||
u3k(r_r_a));
|
||||
u3z(new_left);
|
||||
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
return u3nt(u3k(n_a),
|
||||
u3k(l_a),
|
||||
u3qdi_del(r_a, b));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
u3_noun
|
||||
u3qdi_del(u3_noun a,
|
||||
u3_noun b)
|
||||
{
|
||||
if ( u3_nul == a ) {
|
||||
return u3_nul;
|
||||
}
|
||||
else {
|
||||
u3_noun l_a, n_a, r_a;
|
||||
|
||||
if ( (c3n == u3r_trel(a, &n_a, &l_a, &r_a)) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
}
|
||||
else if ( c3n == u3r_sing(n_a, b) ) {
|
||||
if ( c3y == u3qc_gor(b, n_a) ) {
|
||||
return u3nt(u3k(n_a),
|
||||
u3qdi_del(l_a, b),
|
||||
u3k(r_a));
|
||||
}
|
||||
else {
|
||||
return u3nt(u3k(n_a),
|
||||
u3k(l_a),
|
||||
u3qdi_del(r_a, b));
|
||||
}
|
||||
}
|
||||
else {
|
||||
return _rebalance(a);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
u3_noun
|
||||
u3wdi_del(u3_noun cor)
|
||||
{
|
||||
u3_noun a, b;
|
||||
|
||||
if ( c3n == u3r_mean(cor, u3x_sam, &b,
|
||||
u3x_con_sam, &a, 0) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
}
|
||||
else {
|
||||
u3_noun n = u3qdi_del(a, b);
|
||||
return n;
|
||||
}
|
||||
}
|
||||
u3_noun
|
||||
u3wdi_del(u3_noun cor)
|
||||
{
|
||||
u3_noun a, b;
|
||||
u3x_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0);
|
||||
return u3qdi_del(a, b);
|
||||
}
|
||||
|
@ -5,78 +5,71 @@
|
||||
|
||||
/* internal functions
|
||||
*/
|
||||
static
|
||||
u3_noun _i_dif_join(u3_noun d,
|
||||
u3_noun e)
|
||||
{
|
||||
if ( u3_nul == d ) {
|
||||
return u3k(e);
|
||||
} else if (u3_nul == e) {
|
||||
return u3k(d);
|
||||
} else {
|
||||
u3_noun n_d, l_d, r_d;
|
||||
u3_noun n_e, l_e, r_e;
|
||||
static u3_noun
|
||||
_i_dif_join(u3_noun d,
|
||||
u3_noun e)
|
||||
{
|
||||
if ( u3_nul == d ) {
|
||||
return u3k(e);
|
||||
}
|
||||
else if ( u3_nul == e ) {
|
||||
return u3k(d);
|
||||
}
|
||||
else {
|
||||
u3_noun n_d, lr_d;
|
||||
u3_noun n_e, lr_e;
|
||||
u3x_cell(d, &n_d, &lr_d);
|
||||
u3x_cell(e, &n_e, &lr_e);
|
||||
|
||||
if ( c3n == u3r_trel(d, &n_d, &l_d, &r_d)
|
||||
|| c3n == u3r_trel(e, &n_e, &l_e, &r_e) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
} else {
|
||||
if ( c3y == u3qc_mor(n_d, n_e) ) {
|
||||
return u3nt(u3k(n_d),
|
||||
u3k(l_d),
|
||||
_i_dif_join(u3k(r_d), u3k(e)));
|
||||
} else {
|
||||
return u3nt(u3k(n_e),
|
||||
_i_dif_join(u3k(d), u3k(l_e)),
|
||||
u3k(r_e));
|
||||
}
|
||||
}
|
||||
if ( c3y == u3qc_mor(n_d, n_e) ) {
|
||||
u3_noun l_d, r_d;
|
||||
u3x_cell(lr_d, &l_d, &r_d);
|
||||
|
||||
return u3nt(u3k(n_d),
|
||||
u3k(l_d),
|
||||
_i_dif_join(u3k(r_d), u3k(e)));
|
||||
}
|
||||
else {
|
||||
u3_noun l_e, r_e;
|
||||
u3x_cell(lr_e, &l_e, &r_e);
|
||||
|
||||
return u3nt(u3k(n_e),
|
||||
_i_dif_join(u3k(d), u3k(l_e)),
|
||||
u3k(r_e));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* functions
|
||||
*/
|
||||
u3_noun u3wdi_dif(u3_noun cor)
|
||||
{
|
||||
u3_noun a, b;
|
||||
if ( c3n == u3r_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
} else {
|
||||
return u3qdi_dif(a, b);
|
||||
}
|
||||
u3_noun
|
||||
u3wdi_dif(u3_noun cor)
|
||||
{
|
||||
u3_noun a, b;
|
||||
u3x_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0);
|
||||
return u3qdi_dif(a, b);
|
||||
}
|
||||
|
||||
u3_noun
|
||||
u3qdi_dif(u3_noun a,
|
||||
u3_noun b)
|
||||
{
|
||||
if ( u3_nul == b ) {
|
||||
return u3k(a);
|
||||
}
|
||||
else {
|
||||
u3_noun n_b, l_b, r_b;
|
||||
u3_noun c, l_c, r_c;
|
||||
u3_noun d, e;
|
||||
|
||||
u3_noun u3qdi_dif(u3_noun a,
|
||||
u3_noun b)
|
||||
{
|
||||
if ( u3_nul == b ) {
|
||||
return u3k(a);
|
||||
} else {
|
||||
u3_noun n_b, l_b, r_b;
|
||||
u3_noun c, l_c, r_c;
|
||||
u3x_trel(b, &n_b, &l_b, &r_b);
|
||||
c = u3qdi_bif(a, n_b);
|
||||
u3x_cell(c, &l_c, &r_c);
|
||||
|
||||
if ( c3n == u3r_trel(b, &n_b, &l_b, &r_b) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
} else {
|
||||
d = u3qdi_dif(l_c, l_b);
|
||||
e = u3qdi_dif(r_c, r_b);
|
||||
u3z(c);
|
||||
|
||||
c = u3qdi_bif(a, n_b);
|
||||
|
||||
if ( c3n == u3r_cell(c, &l_c, &r_c) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
} else {
|
||||
u3_noun d;
|
||||
u3_noun e;
|
||||
|
||||
d = u3qdi_dif(l_c, l_b);
|
||||
e = u3qdi_dif(r_c, r_b);
|
||||
u3z(c);
|
||||
|
||||
return _i_dif_join(d, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
return _i_dif_join(d, e);
|
||||
}
|
||||
|
||||
/*
|
||||
u3_weak u3kdi_dif(u3_noun a, u3_noun b);
|
||||
*/
|
||||
}
|
||||
|
@ -3,56 +3,39 @@
|
||||
*/
|
||||
#include "all.h"
|
||||
|
||||
|
||||
/* functions
|
||||
*/
|
||||
u3_noun
|
||||
u3qdi_gas(u3_noun a,
|
||||
u3_noun b)
|
||||
{
|
||||
if ( u3_nul == b ) {
|
||||
return u3k(a);
|
||||
}
|
||||
else {
|
||||
if ( c3n == u3du(b) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
} else {
|
||||
u3_noun i_b = u3h(b);
|
||||
u3_noun t_b = u3t(b);
|
||||
u3_noun c;
|
||||
|
||||
if ( u3_none == (c = u3qdi_put(a, i_b)) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
} else {
|
||||
u3_noun d = u3qdi_gas(c, t_b);
|
||||
|
||||
u3z(c);
|
||||
return d;
|
||||
}
|
||||
}
|
||||
}
|
||||
u3_noun
|
||||
u3qdi_gas(u3_noun a,
|
||||
u3_noun b)
|
||||
{
|
||||
if ( u3_nul == b ) {
|
||||
return u3k(a);
|
||||
}
|
||||
u3_noun
|
||||
u3wdi_gas(u3_noun cor)
|
||||
{
|
||||
u3_noun a, b;
|
||||
else {
|
||||
u3_noun i_b, t_b;
|
||||
u3x_cell(b, &i_b, &t_b);
|
||||
|
||||
if ( c3n == u3r_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
} else {
|
||||
return u3qdi_gas(a, b);
|
||||
}
|
||||
u3_noun c = u3qdi_put(a, i_b);
|
||||
u3_noun d = u3qdi_gas(c, t_b);
|
||||
u3z(c);
|
||||
return d;
|
||||
}
|
||||
u3_noun
|
||||
u3kdi_gas(u3_noun a,
|
||||
u3_noun b)
|
||||
{
|
||||
u3_weak c = u3qdi_gas(a, b);
|
||||
}
|
||||
|
||||
u3z(a); u3z(b);
|
||||
if ( u3_none == c ) {
|
||||
return u3m_bail(c3__exit);
|
||||
}
|
||||
else return c;
|
||||
}
|
||||
u3_noun
|
||||
u3wdi_gas(u3_noun cor)
|
||||
{
|
||||
u3_noun a, b;
|
||||
u3x_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0);
|
||||
return u3qdi_gas(a, b);
|
||||
}
|
||||
|
||||
u3_noun
|
||||
u3kdi_gas(u3_noun a,
|
||||
u3_noun b)
|
||||
{
|
||||
u3_noun c = u3qdi_gas(a, b);
|
||||
u3z(a); u3z(b);
|
||||
return c;
|
||||
}
|
||||
|
@ -3,56 +3,42 @@
|
||||
*/
|
||||
#include "all.h"
|
||||
|
||||
|
||||
/* functions
|
||||
*/
|
||||
u3_noun
|
||||
u3qdi_has(u3_noun a,
|
||||
u3_noun b)
|
||||
{
|
||||
if ( u3_nul == a ) {
|
||||
return c3n;
|
||||
u3_noun
|
||||
u3qdi_has(u3_noun a,
|
||||
u3_noun b)
|
||||
{
|
||||
if ( u3_nul == a ) {
|
||||
return c3n;
|
||||
}
|
||||
else {
|
||||
u3_noun n_a, lr_a;
|
||||
u3x_cell(a, &n_a, &lr_a);
|
||||
|
||||
if ( (c3y == u3r_sing(b, n_a)) ) {
|
||||
return c3y;
|
||||
}
|
||||
else {
|
||||
u3_noun l_a, n_a, r_a;
|
||||
|
||||
if ( (c3n == u3r_mean(a, 2, &n_a, 6, &l_a, 7, &r_a, 0)) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
}
|
||||
else {
|
||||
if ( (c3y == u3r_sing(b, n_a)) ) {
|
||||
return c3y;
|
||||
}
|
||||
else {
|
||||
if ( c3y == u3qc_gor(b, n_a) ) {
|
||||
return u3qdi_has(l_a, b);
|
||||
}
|
||||
else return u3qdi_has(r_a, b);
|
||||
}
|
||||
}
|
||||
return ( c3y == u3qc_gor(b, n_a) ) ? u3qdi_has(u3h(lr_a), b)
|
||||
: u3qdi_has(u3t(lr_a), b);
|
||||
}
|
||||
}
|
||||
u3_noun
|
||||
u3wdi_has(u3_noun cor)
|
||||
{
|
||||
u3_noun a, b;
|
||||
}
|
||||
|
||||
if ( c3n == u3r_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
} else {
|
||||
return u3qdi_has(a, b);
|
||||
}
|
||||
}
|
||||
u3_noun
|
||||
u3kdi_has(u3_noun a,
|
||||
u3_noun b)
|
||||
{
|
||||
u3_weak c = u3qdi_has(a, b);
|
||||
|
||||
u3z(a); u3z(b);
|
||||
if ( u3_none == c ) {
|
||||
return u3m_bail(c3__exit);
|
||||
}
|
||||
else return c;
|
||||
}
|
||||
u3_noun
|
||||
u3wdi_has(u3_noun cor)
|
||||
{
|
||||
u3_noun a, b;
|
||||
u3x_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0);
|
||||
return u3qdi_has(a, b);
|
||||
}
|
||||
|
||||
u3_noun
|
||||
u3kdi_has(u3_noun a,
|
||||
u3_noun b)
|
||||
{
|
||||
u3_noun c = u3qdi_has(a, b);
|
||||
u3z(a); u3z(b);
|
||||
return c;
|
||||
}
|
||||
|
@ -3,74 +3,56 @@
|
||||
*/
|
||||
#include "all.h"
|
||||
|
||||
|
||||
/* functions
|
||||
*/
|
||||
u3_noun
|
||||
u3qdi_int(u3_noun a,
|
||||
u3_noun b)
|
||||
{
|
||||
if ( u3_nul == a ) {
|
||||
return u3k(u3_nul);
|
||||
u3_noun
|
||||
u3qdi_int(u3_noun a,
|
||||
u3_noun b)
|
||||
{
|
||||
if ( u3_nul == a ) {
|
||||
return u3k(u3_nul);
|
||||
}
|
||||
else if ( u3_nul == b ) {
|
||||
return u3k(u3_nul);
|
||||
}
|
||||
else {
|
||||
u3_noun l_a, n_a, r_a, lr_a;
|
||||
u3_noun l_b, n_b, r_b, lr_b;
|
||||
u3_noun c;
|
||||
u3x_cell(a, &n_a, &lr_a);
|
||||
u3x_cell(b, &n_b, &lr_b);
|
||||
|
||||
if ( c3y == u3qc_mor(n_b, n_a) ) {
|
||||
c = a; a = b; b = c;
|
||||
c = n_a; n_a = n_b; n_b = c;
|
||||
c = lr_a; lr_a = lr_b; lr_b = c;
|
||||
}
|
||||
else if ( u3_nul == b ) {
|
||||
return u3k(u3_nul);
|
||||
|
||||
u3x_cell(lr_a, &l_a, &r_a);
|
||||
u3x_cell(lr_b, &l_b, &r_b);
|
||||
|
||||
if ( c3y == u3r_sing(n_a, n_b) ) {
|
||||
return u3nt(u3k(n_a),
|
||||
u3qdi_int(l_a, l_b),
|
||||
u3qdi_int(r_a, r_b));
|
||||
}
|
||||
else if ( c3y == u3qc_gor(n_b, n_a) ) {
|
||||
return u3qdi_uni(u3qdi_int(l_a, u3nt(n_b, l_b, u3_nul)),
|
||||
u3qdi_int(a, r_b));
|
||||
}
|
||||
else {
|
||||
u3_noun l_a, n_a, r_a, lr_a;
|
||||
u3_noun l_b, n_b, r_b, lr_b;
|
||||
u3_noun c;
|
||||
|
||||
if ( (c3n == u3r_cell(a, &n_a, &lr_a)) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
}
|
||||
else if ( (c3n == u3r_cell(b, &n_b, &lr_b)) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
}
|
||||
else {
|
||||
if ( c3y == u3qc_mor(n_b, n_a) ) {
|
||||
c = a; a = b; b = c;
|
||||
c = n_a; n_a = n_b; n_b = c;
|
||||
c = lr_a; lr_a = lr_b; lr_b = c;
|
||||
}
|
||||
if ( c3n == u3r_cell(lr_a, &l_a, &r_a) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
}
|
||||
else if ( c3n == u3r_cell(lr_b, &l_b, &r_b) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
}
|
||||
else if ( c3y == u3r_sing(n_a, n_b) ) {
|
||||
return u3nt(u3k(n_a),
|
||||
u3qdi_int(l_a, l_b),
|
||||
u3qdi_int(r_a, r_b));
|
||||
}
|
||||
else if ( c3y == u3qc_gor(n_b, n_a) ) {
|
||||
return u3qdi_uni(u3qdi_int(l_a,
|
||||
u3nt(n_b,
|
||||
l_b,
|
||||
u3_nul)),
|
||||
u3qdi_int(a,
|
||||
r_b));
|
||||
}
|
||||
else {
|
||||
return u3qdi_uni(u3qdi_int(r_a,
|
||||
u3nt(n_b,
|
||||
u3_nul,
|
||||
r_b)),
|
||||
u3qdi_int(a,
|
||||
l_b));
|
||||
}
|
||||
}
|
||||
return u3qdi_uni(u3qdi_int(r_a, u3nt(n_b, u3_nul, r_b)),
|
||||
u3qdi_int(a, l_b));
|
||||
}
|
||||
}
|
||||
u3_noun
|
||||
u3wdi_int(u3_noun cor)
|
||||
{
|
||||
u3_noun a, b;
|
||||
}
|
||||
|
||||
if ( c3n == u3r_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
} else {
|
||||
return u3qdi_int(a, b);
|
||||
}
|
||||
}
|
||||
// XX disabled in tree.c, reference counts presumed wrong
|
||||
//
|
||||
u3_noun
|
||||
u3wdi_int(u3_noun cor)
|
||||
{
|
||||
u3_noun a, b;
|
||||
u3x_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0);
|
||||
return u3qdi_int(a, b);
|
||||
}
|
||||
|
@ -3,100 +3,84 @@
|
||||
*/
|
||||
#include "all.h"
|
||||
|
||||
|
||||
/* functions
|
||||
*/
|
||||
u3_noun
|
||||
u3qdi_put(u3_noun a,
|
||||
u3_noun b)
|
||||
{
|
||||
if ( u3_nul == a ) {
|
||||
return u3nt(u3k(b), u3_nul, u3_nul);
|
||||
u3_noun
|
||||
u3qdi_put(u3_noun a,
|
||||
u3_noun b)
|
||||
{
|
||||
if ( u3_nul == a ) {
|
||||
return u3nt(u3k(b), u3_nul, u3_nul);
|
||||
}
|
||||
else {
|
||||
u3_noun n_a, lr_a;
|
||||
u3x_cell(a, &n_a, &lr_a);
|
||||
|
||||
if ( c3y == u3r_sing(n_a, b) ) {
|
||||
return u3k(a);
|
||||
}
|
||||
else {
|
||||
u3_noun l_a, n_a, r_a, lr_a; // XX copy tree boilerplate to other pt4
|
||||
u3_noun c, l_c, n_c, r_c;
|
||||
u3_noun c, n_c, l_c, r_c;
|
||||
u3_noun l_a, r_a;
|
||||
u3x_cell(lr_a, &l_a, &r_a);
|
||||
|
||||
if ( (c3n == u3r_cell(a, &n_a, &lr_a)) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
}
|
||||
else if ( c3y == u3r_sing(n_a, b) ) {
|
||||
return u3k(a);
|
||||
}
|
||||
else if ( c3n == u3r_cell(lr_a, &l_a, &r_a) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
}
|
||||
else {
|
||||
if ( c3y == u3qc_gor(b, n_a) ) {
|
||||
c = u3qdi_put(l_a, b);
|
||||
if ( c3y == u3qc_gor(b, n_a) ) {
|
||||
c = u3qdi_put(l_a, b);
|
||||
|
||||
if ( c3y == u3qc_mor(n_a, u3h(c)) ) {
|
||||
return u3nt(u3k(n_a),
|
||||
c,
|
||||
u3k(r_a));
|
||||
}
|
||||
else {
|
||||
u3r_trel(c, &n_c, &l_c, &r_c);
|
||||
{
|
||||
u3_noun d = u3nt(u3k(n_c),
|
||||
u3k(l_c),
|
||||
u3nt(u3k(n_a),
|
||||
u3k(r_c),
|
||||
u3k(r_a)));
|
||||
|
||||
u3z(c);
|
||||
return d;
|
||||
}
|
||||
}
|
||||
if ( c3y == u3qc_mor(n_a, u3h(c)) ) {
|
||||
return u3nt(u3k(n_a),
|
||||
c,
|
||||
u3k(r_a));
|
||||
}
|
||||
else {
|
||||
c = u3qdi_put(r_a, b);
|
||||
u3r_trel(c, &n_c, &l_c, &r_c);
|
||||
{
|
||||
u3_noun d = u3nt(u3k(n_c),
|
||||
u3k(l_c),
|
||||
u3nt(u3k(n_a), u3k(r_c), u3k(r_a)));
|
||||
|
||||
if ( c3y == u3qc_mor(n_a, u3h(c)) ) {
|
||||
return u3nt(u3k(n_a),
|
||||
u3k(l_a),
|
||||
c);
|
||||
u3z(c);
|
||||
return d;
|
||||
}
|
||||
else {
|
||||
u3r_trel(c, &n_c, &l_c, &r_c);
|
||||
{
|
||||
u3_noun d = u3nt(u3k(n_c),
|
||||
u3nt(u3k(n_a),
|
||||
u3k(l_a),
|
||||
u3k(l_c)),
|
||||
u3k(r_c));
|
||||
}
|
||||
}
|
||||
else {
|
||||
c = u3qdi_put(r_a, b);
|
||||
|
||||
u3z(c);
|
||||
return d;
|
||||
}
|
||||
if ( c3y == u3qc_mor(n_a, u3h(c)) ) {
|
||||
return u3nt(u3k(n_a),
|
||||
u3k(l_a),
|
||||
c);
|
||||
}
|
||||
else {
|
||||
u3r_trel(c, &n_c, &l_c, &r_c);
|
||||
{
|
||||
u3_noun d = u3nt(u3k(n_c),
|
||||
u3nt(u3k(n_a), u3k(l_a), u3k(l_c)),
|
||||
u3k(r_c));
|
||||
|
||||
u3z(c);
|
||||
return d;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
u3_noun
|
||||
u3wdi_put(u3_noun cor)
|
||||
{
|
||||
u3_noun a, b;
|
||||
|
||||
if ( c3n == u3r_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
} else {
|
||||
return u3qdi_put(a, b);
|
||||
}
|
||||
}
|
||||
u3_weak
|
||||
u3kdi_put(u3_noun a,
|
||||
u3_noun b)
|
||||
{
|
||||
// Bizarre asymmetry in old jets.
|
||||
//
|
||||
// (Mysterious comment in old glue code.)
|
||||
//
|
||||
u3_noun pro = u3qdi_put(a, b);
|
||||
|
||||
u3z(a); u3z(b);
|
||||
return pro;
|
||||
}
|
||||
}
|
||||
|
||||
u3_noun
|
||||
u3wdi_put(u3_noun cor)
|
||||
{
|
||||
u3_noun a, b;
|
||||
u3x_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0);
|
||||
return u3qdi_put(a, b);
|
||||
}
|
||||
|
||||
u3_noun
|
||||
u3kdi_put(u3_noun a,
|
||||
u3_noun b)
|
||||
{
|
||||
u3_noun pro = u3qdi_put(a, b);
|
||||
u3z(a); u3z(b);
|
||||
return pro;
|
||||
}
|
||||
|
@ -3,53 +3,43 @@
|
||||
*/
|
||||
#include "all.h"
|
||||
|
||||
|
||||
/* functions
|
||||
*/
|
||||
static u3_noun
|
||||
_tap_in(u3_noun a,
|
||||
u3_noun b)
|
||||
{
|
||||
if ( u3_nul == a ) {
|
||||
return b;
|
||||
} else {
|
||||
u3_noun l_a, n_a, r_a;
|
||||
|
||||
if ( (c3n == u3r_trel(a, &n_a, &l_a, &r_a)) ) {
|
||||
u3z(b);
|
||||
return u3m_bail(c3__exit);
|
||||
} else {
|
||||
return _tap_in(r_a,
|
||||
u3nc(u3k(n_a),
|
||||
_tap_in(l_a, b)));
|
||||
}
|
||||
}
|
||||
static u3_noun
|
||||
_tap_in(u3_noun a,
|
||||
u3_noun b)
|
||||
{
|
||||
if ( u3_nul == a ) {
|
||||
return b;
|
||||
}
|
||||
else {
|
||||
u3_noun n_a, l_a, r_a;
|
||||
u3x_trel(a, &n_a, &l_a, &r_a);
|
||||
|
||||
u3_noun
|
||||
u3qdi_tap(u3_noun a)
|
||||
{
|
||||
return _tap_in(a, u3_nul);
|
||||
return _tap_in(r_a,
|
||||
u3nc(u3k(n_a),
|
||||
_tap_in(l_a, b)));
|
||||
}
|
||||
u3_noun
|
||||
u3wdi_tap(u3_noun cor)
|
||||
{
|
||||
u3_noun a;
|
||||
}
|
||||
|
||||
if ( c3n == u3r_mean(cor, u3x_con_sam, &a, 0) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
} else {
|
||||
return u3qdi_tap(a);
|
||||
}
|
||||
}
|
||||
u3_noun
|
||||
u3kdi_tap(u3_noun a)
|
||||
{
|
||||
u3_weak b = u3qdi_tap(a);
|
||||
u3_noun
|
||||
u3qdi_tap(u3_noun a)
|
||||
{
|
||||
return _tap_in(a, u3_nul);
|
||||
}
|
||||
|
||||
u3z(a);
|
||||
if ( u3_none == b ) {
|
||||
return u3m_bail(c3__exit);
|
||||
}
|
||||
else return b;
|
||||
}
|
||||
u3_noun
|
||||
u3wdi_tap(u3_noun cor)
|
||||
{
|
||||
u3_noun a;
|
||||
u3x_mean(cor, u3x_con_sam, &a, 0);
|
||||
return u3qdi_tap(a);
|
||||
}
|
||||
|
||||
u3_noun
|
||||
u3kdi_tap(u3_noun a)
|
||||
{
|
||||
u3_noun b = u3qdi_tap(a);
|
||||
u3z(a);
|
||||
return b;
|
||||
}
|
||||
|
@ -5,100 +5,93 @@
|
||||
|
||||
/* internal functions
|
||||
*/
|
||||
|
||||
static u3_noun
|
||||
_in_uni(u3_noun a, u3_noun b)
|
||||
{
|
||||
u3_noun n_a, l_a, r_a,
|
||||
n_b, l_b, r_b,
|
||||
neb, sub, naw, pro;
|
||||
if ( u3_nul == a ) {
|
||||
return u3k(b);
|
||||
}
|
||||
else if ( u3_nul == b ) {
|
||||
return u3k(a);
|
||||
}
|
||||
else if ( (c3n == u3r_trel(a, &n_a, &l_a, &r_a))
|
||||
|| (c3n == u3r_trel(b, &n_b, &l_b, &r_b)) )
|
||||
{
|
||||
return u3m_bail(c3__exit);
|
||||
}
|
||||
else if ( c3n == u3qc_mor(n_a, n_b) ) {
|
||||
if ( c3y == u3r_sing(n_a, n_b) ) {
|
||||
else {
|
||||
u3_noun n_a, l_a, r_a,
|
||||
n_b, l_b, r_b,
|
||||
neb, sub, naw, pro;
|
||||
u3x_trel(a, &n_a, &l_a, &r_a);
|
||||
u3x_trel(b, &n_b, &l_b, &r_b);
|
||||
|
||||
if ( c3n == u3qc_mor(n_a, n_b) ) {
|
||||
if ( c3y == u3r_sing(n_a, n_b) ) {
|
||||
return u3nt(u3k(n_b), _in_uni(l_a, l_b), _in_uni(r_a, r_b));
|
||||
}
|
||||
else if ( c3y == u3qc_gor(n_a, n_b) ) {
|
||||
naw = u3nt(u3k(n_a), u3k(l_a), u3_nul);
|
||||
sub = _in_uni(naw, l_b);
|
||||
neb = u3nt(u3k(n_b), sub, u3k(r_b));
|
||||
pro = _in_uni(r_a, neb);
|
||||
u3z(naw); u3z(neb);
|
||||
return pro;
|
||||
}
|
||||
else {
|
||||
naw = u3nt(u3k(n_a), u3_nul, u3k(r_a));
|
||||
sub = _in_uni(naw, r_b);
|
||||
neb = u3nt(u3k(n_b), u3k(l_b), sub);
|
||||
pro = _in_uni(l_a, neb);
|
||||
u3z(naw); u3z(neb);
|
||||
return pro;
|
||||
}
|
||||
}
|
||||
else if ( c3y == u3r_sing(n_b, n_a) ) {
|
||||
return u3nt(u3k(n_b), _in_uni(l_a, l_b), _in_uni(r_a, r_b));
|
||||
}
|
||||
else if ( c3y == u3qc_gor(n_a, n_b) ) {
|
||||
naw = u3nt(u3k(n_a), u3k(l_a), u3_nul);
|
||||
sub = _in_uni(naw, l_b);
|
||||
neb = u3nt(u3k(n_b), sub, u3k(r_b));
|
||||
pro = _in_uni(r_a, neb);
|
||||
u3z(naw); u3z(neb);
|
||||
else if ( c3y == u3qc_gor(n_b, n_a) ) {
|
||||
neb = u3nt(u3k(n_b), u3k(l_b), u3_nul);
|
||||
sub = _in_uni(l_a, neb);
|
||||
naw = u3nt(u3k(n_a), sub, u3k(r_a));
|
||||
pro = _in_uni(naw, r_b);
|
||||
u3z(neb); u3z(naw);
|
||||
return pro;
|
||||
}
|
||||
else {
|
||||
naw = u3nt(u3k(n_a), u3_nul, u3k(r_a));
|
||||
sub = _in_uni(naw, r_b);
|
||||
neb = u3nt(u3k(n_b), u3k(l_b), sub);
|
||||
pro = _in_uni(l_a, neb);
|
||||
u3z(naw); u3z(neb);
|
||||
neb = u3nt(u3k(n_b), u3_nul, u3k(r_b));
|
||||
sub = _in_uni(r_a, neb);
|
||||
naw = u3nt(u3k(n_a), u3k(l_a), sub);
|
||||
pro = _in_uni(naw, l_b);
|
||||
u3z(neb); u3z(naw);
|
||||
return pro;
|
||||
}
|
||||
}
|
||||
else if ( c3y == u3r_sing(n_b, n_a) ) {
|
||||
return u3nt(u3k(n_b), _in_uni(l_a, l_b), _in_uni(r_a, r_b));
|
||||
}
|
||||
else if ( c3y == u3qc_gor(n_b, n_a) ) {
|
||||
neb = u3nt(u3k(n_b), u3k(l_b), u3_nul);
|
||||
sub = _in_uni(l_a, neb);
|
||||
naw = u3nt(u3k(n_a), sub, u3k(r_a));
|
||||
pro = _in_uni(naw, r_b);
|
||||
u3z(neb); u3z(naw);
|
||||
return pro;
|
||||
}
|
||||
else {
|
||||
neb = u3nt(u3k(n_b), u3_nul, u3k(r_b));
|
||||
sub = _in_uni(r_a, neb);
|
||||
naw = u3nt(u3k(n_a), u3k(l_a), sub);
|
||||
pro = _in_uni(naw, l_b);
|
||||
u3z(neb); u3z(naw);
|
||||
return pro;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* functions
|
||||
*/
|
||||
u3_noun
|
||||
u3kdi_uni(u3_noun a,
|
||||
u3_noun b)
|
||||
{
|
||||
u3_noun c = u3qdi_uni(a, b);
|
||||
u3_noun
|
||||
u3kdi_uni(u3_noun a,
|
||||
u3_noun b)
|
||||
{
|
||||
u3_noun c = u3qdi_uni(a, b);
|
||||
u3z(a); u3z(b);
|
||||
return c;
|
||||
}
|
||||
|
||||
u3z(a);
|
||||
u3z(b);
|
||||
return c;
|
||||
u3_noun
|
||||
u3qdi_uni(u3_noun a,
|
||||
u3_noun b)
|
||||
{
|
||||
if ( c3y == u3r_sing(a, b) ) {
|
||||
return u3k(a);
|
||||
}
|
||||
|
||||
u3_noun
|
||||
u3qdi_uni(u3_noun a,
|
||||
u3_noun b)
|
||||
{
|
||||
if ( c3y == u3r_sing(a, b) ) {
|
||||
return u3k(a);
|
||||
}
|
||||
else {
|
||||
return _in_uni(a, b);
|
||||
}
|
||||
else {
|
||||
return _in_uni(a, b);
|
||||
}
|
||||
u3_noun
|
||||
u3wdi_uni(u3_noun cor)
|
||||
{
|
||||
u3_noun a, b;
|
||||
}
|
||||
|
||||
if ( c3n == u3r_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
} else {
|
||||
return u3qdi_uni(a, b);
|
||||
}
|
||||
}
|
||||
u3_noun
|
||||
u3wdi_uni(u3_noun cor)
|
||||
{
|
||||
u3_noun a, b;
|
||||
u3x_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0);
|
||||
return u3qdi_uni(a, b);
|
||||
}
|
||||
|
||||
|
@ -5,26 +5,24 @@
|
||||
|
||||
/* functions
|
||||
*/
|
||||
u3_noun u3wdi_wyt(u3_noun cor)
|
||||
{
|
||||
u3_noun a;
|
||||
if ( c3n == u3r_mean(cor, u3x_con_2, &a, 0) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
} else {
|
||||
return u3qdi_wyt(a);
|
||||
}
|
||||
u3_noun
|
||||
u3qdi_wyt(u3_noun a)
|
||||
{
|
||||
if ( u3_nul == a ) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
u3_noun u3qdi_wyt(u3_noun a)
|
||||
{
|
||||
else {
|
||||
u3_noun n_a, l_a, r_a;
|
||||
if ( u3_nul == a ) {
|
||||
return 0;
|
||||
}
|
||||
else if ( c3n == u3r_trel(a, &n_a, &l_a, &r_a) ) {
|
||||
return u3m_bail(c3__exit);
|
||||
}
|
||||
else {
|
||||
return u3i_vint(u3ka_add(u3qdi_wyt(l_a), u3qdi_wyt(r_a)));
|
||||
}
|
||||
u3x_trel(a, &n_a, &l_a, &r_a);
|
||||
|
||||
return u3i_vint(u3ka_add(u3qdi_wyt(l_a), u3qdi_wyt(r_a)));
|
||||
}
|
||||
}
|
||||
|
||||
u3_noun
|
||||
u3wdi_wyt(u3_noun cor)
|
||||
{
|
||||
u3_noun a;
|
||||
u3x_mean(cor, u3x_con_2, &a, 0);
|
||||
return u3qdi_wyt(a);
|
||||
}
|
||||
|
@ -163,51 +163,63 @@ u3r_at(u3_atom a, u3_noun b)
|
||||
|
||||
__attribute__((no_sanitize_address))
|
||||
c3_o
|
||||
u3r_mean(u3_noun som,
|
||||
...)
|
||||
u3r_vmean(u3_noun som, va_list ap)
|
||||
{
|
||||
va_list ap;
|
||||
va_list aq;
|
||||
c3_w len_w;
|
||||
struct _mean_pair* prs_m;
|
||||
|
||||
c3_assert(u3_none != som);
|
||||
|
||||
/* Count.
|
||||
*/
|
||||
// traverse copy of va_list for alloca
|
||||
//
|
||||
va_copy(aq, ap);
|
||||
len_w = 0;
|
||||
{
|
||||
va_start(ap, som);
|
||||
while ( 1 ) {
|
||||
if ( 0 == va_arg(ap, c3_w) ) {
|
||||
break;
|
||||
}
|
||||
va_arg(ap, u3_noun*);
|
||||
len_w++;
|
||||
|
||||
while ( 1 ) {
|
||||
if ( 0 == va_arg(aq, c3_w) ) {
|
||||
break;
|
||||
}
|
||||
va_end(ap);
|
||||
va_arg(aq, u3_noun*);
|
||||
len_w++;
|
||||
}
|
||||
|
||||
va_end(aq);
|
||||
|
||||
c3_assert( 0 != len_w );
|
||||
prs_m = alloca(len_w * sizeof(struct _mean_pair));
|
||||
|
||||
/* Install.
|
||||
*/
|
||||
// traverse va_list and extract args
|
||||
//
|
||||
{
|
||||
c3_w i_w;
|
||||
|
||||
va_start(ap, som);
|
||||
for ( i_w = 0; i_w < len_w; i_w++ ) {
|
||||
prs_m[i_w].axe_w = va_arg(ap, c3_w);
|
||||
prs_m[i_w].som = va_arg(ap, u3_noun*);
|
||||
}
|
||||
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
/* Extract.
|
||||
*/
|
||||
// extract axis from som
|
||||
//
|
||||
return _mean_extract(som, len_w, prs_m);
|
||||
}
|
||||
|
||||
c3_o
|
||||
u3r_mean(u3_noun som, ...)
|
||||
{
|
||||
c3_o ret_o;
|
||||
va_list ap;
|
||||
|
||||
va_start(ap, som);
|
||||
ret_o = u3r_vmean(som, ap);
|
||||
va_end(ap);
|
||||
|
||||
return ret_o;
|
||||
}
|
||||
|
||||
/* _sang_one(): unify but leak old.
|
||||
*/
|
||||
static void
|
||||
|
@ -8,10 +8,7 @@
|
||||
u3_noun
|
||||
u3x_good(u3_weak som)
|
||||
{
|
||||
if ( u3_none == som ) {
|
||||
return u3m_bail(c3__exit);
|
||||
}
|
||||
else return som;
|
||||
return ( u3_none == som ) ? u3m_bail(c3__exit) : som;
|
||||
}
|
||||
|
||||
/* u3x_at (u3at): fragment.
|
||||
@ -19,11 +16,27 @@ u3x_good(u3_weak som)
|
||||
u3_noun
|
||||
u3x_at(u3_noun axe, u3_noun som)
|
||||
{
|
||||
u3_weak pro = u3r_at(axe, som);
|
||||
return u3x_good(u3r_at(axe, som));
|
||||
}
|
||||
|
||||
if ( u3_none == pro ) {
|
||||
return u3m_bail(c3__exit);
|
||||
} else return pro;
|
||||
/* u3x_mean():
|
||||
**
|
||||
** Attempt to deconstruct `a` by axis, noun pairs; 0 terminates.
|
||||
** Axes must be sorted in tree order.
|
||||
*/
|
||||
void
|
||||
u3x_mean(u3_noun som, ...)
|
||||
{
|
||||
c3_o ret_o;
|
||||
va_list ap;
|
||||
|
||||
va_start(ap, som);
|
||||
ret_o = u3r_vmean(som, ap);
|
||||
va_end(ap);
|
||||
|
||||
if ( c3n == ret_o ) {
|
||||
u3m_bail(c3__exit);
|
||||
}
|
||||
}
|
||||
|
||||
/* u3x_cell():
|
||||
@ -32,8 +45,8 @@ u3x_at(u3_noun axe, u3_noun som)
|
||||
*/
|
||||
void
|
||||
u3x_cell(u3_noun a,
|
||||
u3_noun* b,
|
||||
u3_noun* c)
|
||||
u3_noun* b,
|
||||
u3_noun* c)
|
||||
{
|
||||
if ( c3n == u3r_cell(a, b, c) ) {
|
||||
u3m_bail(c3__exit);
|
||||
@ -46,9 +59,9 @@ u3x_cell(u3_noun a,
|
||||
*/
|
||||
void
|
||||
u3x_trel(u3_noun a,
|
||||
u3_noun* b,
|
||||
u3_noun* c,
|
||||
u3_noun* d)
|
||||
u3_noun* b,
|
||||
u3_noun* c,
|
||||
u3_noun* d)
|
||||
{
|
||||
if ( c3n == u3r_trel(a, b, c, d) ) {
|
||||
u3m_bail(c3__exit);
|
||||
@ -61,10 +74,10 @@ u3x_trel(u3_noun a,
|
||||
*/
|
||||
void
|
||||
u3x_qual(u3_noun a,
|
||||
u3_noun* b,
|
||||
u3_noun* c,
|
||||
u3_noun* d,
|
||||
u3_noun* e)
|
||||
u3_noun* b,
|
||||
u3_noun* c,
|
||||
u3_noun* d,
|
||||
u3_noun* e)
|
||||
{
|
||||
if ( c3n == u3r_qual(a, b, c, d, e) ) {
|
||||
u3m_bail(c3__exit);
|
||||
@ -77,11 +90,11 @@ u3x_qual(u3_noun a,
|
||||
*/
|
||||
void
|
||||
u3x_quil(u3_noun a,
|
||||
u3_noun* b,
|
||||
u3_noun* c,
|
||||
u3_noun* d,
|
||||
u3_noun* e,
|
||||
u3_noun* f)
|
||||
u3_noun* b,
|
||||
u3_noun* c,
|
||||
u3_noun* d,
|
||||
u3_noun* e,
|
||||
u3_noun* f)
|
||||
{
|
||||
if ( c3n == u3r_quil(a, b, c, d, e, f) ) {
|
||||
u3m_bail(c3__exit);
|
||||
@ -94,12 +107,12 @@ u3x_quil(u3_noun a,
|
||||
*/
|
||||
void
|
||||
u3x_hext(u3_noun a,
|
||||
u3_noun* b,
|
||||
u3_noun* c,
|
||||
u3_noun* d,
|
||||
u3_noun* e,
|
||||
u3_noun* f,
|
||||
u3_noun* g)
|
||||
u3_noun* b,
|
||||
u3_noun* c,
|
||||
u3_noun* d,
|
||||
u3_noun* e,
|
||||
u3_noun* f,
|
||||
u3_noun* g)
|
||||
{
|
||||
if ( c3n == u3r_hext(a, b, c, d, e, f, g) ) {
|
||||
u3m_bail(c3__exit);
|
||||
|
Loading…
Reference in New Issue
Block a user