コード例 #1
0
ファイル: by_dif.c プロジェクト: agentultra/urbit
/* internal functions
*/
  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;

      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_vor(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));
        }
      }
    }
  }
コード例 #2
0
ファイル: vor.c プロジェクト: alecbrick/urbit
  u3_noun
  u3wc_vor(u3_noun cor)
  {
    u3_noun a, b;

    if ( (c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0)) ) {
      return u3m_bail(c3__exit);
    } else {
      return u3qc_vor(a, b);
    }
  }
コード例 #3
0
ファイル: by_uni.c プロジェクト: agentultra/urbit
/* 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;

      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_vor(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) ) {
        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)))));
      }
    }
  }
コード例 #4
0
ファイル: by_put.c プロジェクト: Gunga/urbit
/* 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;

      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(pn_a, b) ) {
        if ( c3y == u3r_sing(qn_a, c) ) {
          return u3k(a);
        } else {
          return u3nt
            (u3nc(u3k(b), u3k(c)),
                    u3k(l_a),
                    u3k(r_a));
        }
      }
      else {
        if ( c3y == u3qc_gor(b, pn_a) ) {
          d = u3qdb_put(l_a, b, c);

          if ( c3y == u3qc_vor(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 {
          d = u3qdb_put(r_a, b, c);

          if ( c3y == u3qc_vor(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));

              u3z(d);
              return e;
            }
          }
        }
      }
    }
  }