コード例 #1
0
ファイル: parse.c プロジェクト: Gunga/urbit
/* cook
*/
  u3_noun
  _cqe_cook_fun(u3_noun poq,
                u3_noun sef,
                u3_noun tub)
  {
    u3_noun vex = u3x_good(u3n_slam_on(u3k(sef), u3k(tub)));
    u3_noun p_vex, q_vex;

    u3x_cell(vex, &p_vex, &q_vex);

    if ( c3n == u3du(q_vex) ) {
      return vex;
    }
    else {
      u3_noun uq_vex = u3t(q_vex);
      u3_noun puq_vex, quq_vex;
      u3_noun wag;
      u3_noun ret;

      u3x_cell(uq_vex, &puq_vex, &quq_vex);
      wag = u3x_good(u3n_slam_on(u3k(poq), u3k(puq_vex)));
      ret = u3nq(u3k(p_vex),
                 u3_nul,
                 wag,
                 u3k(quq_vex));

      u3z(vex);
      return ret;
    }
  }
コード例 #2
0
ファイル: parse.c プロジェクト: Gunga/urbit
/* glue
*/
  u3_noun
  _cqe_glue_fun(u3_noun bus,
                u3_noun vex,
                u3_noun sab)
  {
    u3_noun p_vex, q_vex;

    u3x_cell(vex, &p_vex, &q_vex);
    if ( c3n == u3du(q_vex) ) {
      return u3k(vex);
    }
    else {
      u3_noun uq_vex = u3t(q_vex);
      u3_noun puq_vex, quq_vex;
      u3_noun yit, yur;
      u3_noun p_yit, q_yit;
      u3_noun ret;

      u3x_cell(uq_vex, &puq_vex, &quq_vex);
      yit = u3x_good(u3n_slam_on(u3k(bus), u3k(quq_vex)));

      u3x_cell(yit, &p_yit, &q_yit);
      yur = _last(p_vex, p_yit);

      if ( c3n == u3du(q_yit) ) {
        ret = u3nc(yur, u3_nul);
      }
      else {
        u3_noun uq_yit = u3t(q_yit);
        u3_noun puq_yit, quq_yit;
        u3_noun wam, p_wam, q_wam, goy;

        u3x_cell(uq_yit, &puq_yit, &quq_yit);
        wam = u3x_good(u3n_slam_on(u3k(sab), u3k(quq_yit)));

        u3x_cell(wam, &p_wam, &q_wam);
        goy = _last(yur, p_wam);
        u3z(yur);

        if ( c3n == u3du(q_wam) ) {
          ret = u3nc(goy, u3_nul);
        } else {
          u3_noun uq_wam = u3t(q_wam);
          u3_noun puq_wam, quq_wam;

          u3x_cell(uq_wam, &puq_wam, &quq_wam);
          ret = u3nq(goy,
                     u3_nul,
                     u3nc(u3k(puq_vex),
                          u3k(puq_wam)),
                     u3k(quq_wam));
        }
        u3z(wam);
      }
      u3z(yit);
      return ret;
    }
  }
コード例 #3
0
ファイル: parse.c プロジェクト: Gunga/urbit
/* bend
*/
  u3_noun
  _cqe_bend_fun(u3_noun raq,
                u3_noun vex,
                u3_noun sab)
  {
    u3_noun p_vex, q_vex;

    u3x_cell(vex, &p_vex, &q_vex);
    if ( c3n == u3du(q_vex) ) {
      return u3k(vex);
    } else {
      u3_noun uq_vex = u3t(q_vex);
      u3_noun puq_vex, quq_vex;
      u3_noun yit, yur;
      u3_noun p_yit, q_yit;
      u3_noun ret;

      u3x_cell(uq_vex, &puq_vex, &quq_vex);
      yit = u3x_good(u3n_slam_on(u3k(sab), u3k(quq_vex)));

      u3x_cell(yit, &p_yit, &q_yit);
      yur = _last(p_vex, p_yit);

      if ( c3n == u3du(q_yit) ) {
        ret = u3nc(yur, u3k(q_vex));
      }
      else {
        u3_noun uq_yit = u3t(q_yit);
        u3_noun puq_yit, quq_yit;
        u3_noun vux;

        u3x_cell(uq_yit, &puq_yit, &quq_yit);

        vux = u3x_good(u3n_slam_on(u3k(raq),
                                   u3nc(u3k(puq_vex),
                                   u3k(puq_yit))));
        if ( u3_nul == vux ) {
          ret = u3nc(yur, u3k(q_vex));
        }
        else {
          ret = u3nq(yur,
                     u3_nul,
                     u3k(u3t(vux)),
                     u3k(quq_yit));
          u3z(vux);
        }
      }
      u3z(yit);
      return ret;
    }
  }
コード例 #4
0
ファイル: skid.c プロジェクト: bd/urbit
/* functions
*/
  u3_noun
  u3qb_skid(u3_noun a,
            u3_noun b)
  {
    if ( 0 == a ) {
      return u3nc(u3_nul, u3_nul);
    }
    else if ( c3n == u3du(a) ) {
      return u3m_bail(c3__exit);
    } else {
      u3_noun acc = u3qb_skid(u3t(a), b);
      u3_noun hoz = u3n_slam_on(u3k(b), u3k(u3h(a)));
      u3_noun nex;

      if ( c3y == hoz ) {
        nex = u3nc(u3nc(u3k(u3h(a)), u3k(u3h(acc))), u3k(u3t(acc)));
      } 
      else {
        nex = u3nc(u3k(u3h(acc)), u3nc(u3k(u3h(a)), u3k(u3t(acc))));
      }
      u3z(hoz);
      u3z(acc);

      return nex;
    }
  }
コード例 #5
0
ファイル: roll.c プロジェクト: OCForks/urbit
/* functions
*/
  u3_noun
  u3qb_roll(u3_noun a,
            u3_noun b)
  {
    if ( 0 == a ) {
      return u3k(u3r_at(u3x_sam_3, b));
    }
    else if ( c3n == u3du(a) ) {
      return u3m_bail(c3__exit);
    }
    else {
      u3_noun gim = u3k(u3h(a));
      u3_noun zor = u3k(u3r_at(u3x_sam_3, b));
      u3_noun daz = u3n_slam_on(u3k(b), u3nc(gim, zor));
      u3_noun vel = u3i_molt(u3k(b), u3x_sam_3, daz, 0);

      if ( u3_none == vel ) {
        return u3m_bail(c3__exit);
      } else {
        u3_noun hox = u3qb_roll(u3t(a), vel);

        u3z(vel);
        return hox;
      }
    }
  }
コード例 #6
0
ファイル: parse.c プロジェクト: Gunga/urbit
/* pfix
*/
  u3_noun
  _cqe_pfix(u3_noun vex,
            u3_noun sab)
  {
    u3_noun p_vex, q_vex;

    u3x_cell(vex, &p_vex, &q_vex);
    if ( c3n == u3du(q_vex) ) {
      return u3k(vex);
    }
    else {
      u3_noun uq_vex = u3t(q_vex);
      u3_noun puq_vex, quq_vex;
      u3_noun yit, p_yit, q_yit;
      u3_noun ret;

      u3x_cell(uq_vex, &puq_vex, &quq_vex);
      yit = u3x_good(u3n_slam_on(u3k(sab), u3k(quq_vex)));

      u3x_cell(yit, &p_yit, &q_yit);
      ret = u3nc(_last(p_vex, p_yit),
                 u3k(q_yit));

      u3z(yit);
      return ret;
    }
  }
コード例 #7
0
ファイル: parse.c プロジェクト: Gunga/urbit
/* cold
*/
  u3_noun
  _cqe_cold_fun(u3_noun cus,
                u3_noun sef,
                u3_noun tub)
  {
    u3_noun vex = u3x_good(u3n_slam_on(u3k(sef), u3k(tub)));
    u3_noun p_vex, q_vex;

    u3x_cell(vex, &p_vex, &q_vex);

    if ( c3n == u3du(q_vex) ) {
      return vex;
    }
    else {
      u3_noun uq_vex = u3t(q_vex);
      u3_noun quq_vex;
      u3_noun ret;

      u3x_cell(uq_vex, 0, &quq_vex);
      ret = u3nq(u3k(p_vex),
                 u3_nul,
                 u3k(cus),
                 u3k(quq_vex));

      u3z(vex);
      return ret;
    }
  }
コード例 #8
0
ファイル: murn.c プロジェクト: OCForks/urbit
/* functions
*/
  u3_noun
  u3qb_murn(u3_noun a, u3_noun b)
  {
    if ( 0 == a ) {
      return a;
    }
    else if ( c3n == u3du(a) ) {
      return u3m_bail(c3__exit);
    }
    else {
      u3_noun one = u3n_slam_on(u3k(b), u3k(u3h(a)));
      u3_noun two = u3qb_murn(u3t(a), b);
      u3_noun nex;

      switch ( u3ud(one) ) {
        case c3y:  u3z(one);
                   return two;
        case c3n:  nex = u3nc(u3k(u3t(one)), two);
                   u3z(one);
                   return nex;
        default:   u3z(one);
                   u3z(two);
                   return u3_none;
      }
    }
  }
コード例 #9
0
ファイル: parse.c プロジェクト: Gunga/urbit
/* stir
*/
  u3_noun
  _cqe_stir_fun(u3_noun rud,
                u3_noun raq,
                u3_noun fel,
                u3_noun tub)
  {
    u3_noun vex = u3x_good(u3n_slam_on(u3k(fel), u3k(tub)));
    u3_noun p_vex, q_vex;
    u3_noun ret;

    u3x_cell(vex, &p_vex, &q_vex);
    if ( c3n == u3du(q_vex) ) {
      ret = u3nq(u3k(p_vex),
                 u3_nul,
                 u3k(rud),
                 u3k(tub));
    }
    else {
      u3_noun uq_vex = u3t(q_vex);
      u3_noun puq_vex, quq_vex;
      u3_noun wag, p_wag, q_wag, uq_wag, puq_wag, quq_wag;

      u3x_cell(uq_vex, &puq_vex, &quq_vex);
      wag = _cqe_stir_fun(rud, raq, fel, quq_vex);

      u3x_cell(wag, &p_wag, &q_wag);
      if ( c3n == u3du(q_wag) ) {
        return u3m_bail(c3__fail);
      }
      uq_wag = u3t(q_wag);
      u3x_cell(uq_wag, &puq_wag, &quq_wag);

      ret = u3nq(_last(p_vex, p_wag),
                 u3_nul,
                 u3x_good(u3n_slam_on(u3k(raq),
                                      u3nc(u3k(puq_vex),
                                           u3k(puq_wag)))),
                 u3k(quq_wag));
      u3z(wag);
    }
    u3z(vex);
    return ret;
  }
コード例 #10
0
ファイル: parse.c プロジェクト: Gunga/urbit
  u3_noun
  _cqe_stew_fun(u3_noun hel,
                u3_noun tub)
  {
    u3_noun p_tub, q_tub;

    u3x_cell(tub, &p_tub, &q_tub);
    if ( c3n == u3du(q_tub) ) {
      return _fail(tub);
    }
    else {
      u3_noun iq_tub = u3h(q_tub);

      if ( !_(u3a_is_cat(iq_tub)) ) {
        return u3m_bail(c3__fail);
      }
      else while ( 1 ) {
        if ( c3n == u3du(hel) ) {
          return _fail(tub);
        }
        else {
          u3_noun n_hel, l_hel, r_hel;
          u3_noun pn_hel, qn_hel;
          c3_o    bit_o;

          u3x_trel(hel, &n_hel, &l_hel, &r_hel);
          u3x_cell(n_hel, &pn_hel, &qn_hel);

          if ( (c3n == u3du(pn_hel)) ) {
            bit_o = __((iq_tub == pn_hel));
          }
          else {
            u3_noun hpn_hel = u3h(pn_hel);
            u3_noun tpn_hel = u3t(pn_hel);

            if ( !_(u3a_is_cat(hpn_hel)) ||
                 !_(u3a_is_cat(tpn_hel)) ) {
              return _fail(tub);
            }
            else bit_o = __((iq_tub >= hpn_hel) && (iq_tub <= tpn_hel));
          }

          if ( c3y == bit_o ) {
            return u3x_good
              (u3n_slam_on(u3k(qn_hel), u3k(tub)));
          } else {
            if ( c3y == _stew_wor(iq_tub, pn_hel) ) {
              hel = l_hel;
            }
            else hel = r_hel;
          }
        }
      }
    }
  }
コード例 #11
0
ファイル: parse.c プロジェクト: Gunga/urbit
/* here
*/
  u3_noun
  _cqe_here_fun(u3_noun hez,
                u3_noun sef,
                u3_noun tub)
  {
    u3_noun vex = u3x_good(u3n_slam_on(u3k(sef), u3k(tub)));
    u3_noun p_vex, q_vex;

    u3x_cell(vex, &p_vex, &q_vex);

    if ( c3n == u3du(q_vex) ) {
      return vex;
    }
    else {
      u3_noun uq_vex = u3t(q_vex);
      u3_noun p_tub, q_tub;
      u3_noun puq_vex, quq_vex, pquq_vex;
      u3_noun gud, wag;
      u3_noun ret;

      u3x_cell(tub, &p_tub, &q_tub);
      u3x_cell(uq_vex, &puq_vex, &quq_vex);
      u3x_cell(quq_vex, &pquq_vex, 0);
      gud = u3nc(
                  u3nc(u3k(p_tub),
                               u3k(pquq_vex)),
                  u3k(puq_vex));

      wag = u3x_good(u3n_slam_on(u3k(hez), gud));
      ret = u3nq(u3k(p_vex),
                 u3_nul,
                 wag,
                 u3k(quq_vex));

      u3z(vex);
      return ret;
    }
  }
コード例 #12
0
ファイル: clap.c プロジェクト: alecbrick/urbit
/* functions
*/
  u3_noun
  u3qb_clap(u3_noun a,
                    u3_noun b,
                    u3_noun c)
  {
    if ( 0 == a ) {
      return u3k(b);
    }
    else if ( 0 == b ) {
      return u3k(a);
    }
    else {
      return u3nc(0, u3n_slam_on(u3k(c), u3nc(u3k(u3t(a)), u3k(u3t(b)))));
    }
  }