Ejemplo n.º 1
0
u4_tool
_lily_hike(u4_plow p,
           u4_axis axe,
           u4_list vix)  /* (axis tool) */
{
  u4_lane lan = p->lan;

  if ( u4_n_zero(vix) ) {
    return u4_kc(lan, u4_nock_frag, axe);
  }
  else {
    u4_list log_tool    = _lily_hike_belt_root(lan, vix);
    u4_list belt_l  = _lily_hike_belt_l(lan, vix);
    u4_list belt_r  = _lily_hike_belt_r(lan, vix);

    if ( !u4_n_zero(log_tool) ) {
      return u4_ch(log_tool);
    }
    else {
      u4_tool tool_l, tool_r;
      
      tool_l = _lily_hike(p, _lily_hike_axis_l(lan, axe), belt_l);
      tool_r = _lily_hike(p, _lily_hike_axis_r(lan, axe), belt_r);

      return _lily_cons(p, tool_l, tool_r);
    }
  }
}
Ejemplo n.º 2
0
  /* _lily_hike_belt_root(): convert (vix) to a log of root tools.
  */
  static u4_log
  _lily_hike_belt_root(u4_lane lan,
                       u4_list vix)
  {
    if ( u4_n_zero(vix) ) {
      return u4_nul;
    }
    else {
      u4_axis axis     = u4_ch(u4_ch(vix));
      u4_tool tool     = u4_ct(u4_ch(vix));
      u4_list log_tool = _lily_hike_belt_root(lan, u4_ct(vix));

      if ( u4_n_eq(u4_axis_1, axis) ) {
        return u4_kc(lan, tool, log_tool);
      }
      else return log_tool;
    }
  }
  /* _lily_hike_belt_root(): convert (pac) to a list of root tools.
  */
  static u2_list
  _lily_hike_belt_root(u2_ray  wir_r,
                       u2_list pac)
  {
    if ( (u2_nul == pac) ) {
      return u2_nul;
    }
    else {
      u2_axis axis     = u2_h(u2_h(pac));
      u2_tool tool     = u2_t(u2_h(pac));
      u2_list list_tool = _lily_hike_belt_root(wir_r, u2_t(pac));

      if ( u2_yes == u2_sing(_1, axis) ) {
        return u2_bc(wir_r, u2_rx(wir_r, tool),
                            list_tool);
      }
      else return list_tool;
    }
  }
/* functions
*/
  u2_noun                                                         //  transfer
  j2_mby(Pt6, hike)(u2_wire wir_r,
                    u2_noun axe,                                  //  retain
                    u2_noun pac)                                  //  retain
  {
    if ( (u2_nul == pac) ) {
      return u2_bc(wir_r, u2_nock_0, u2_rx(wir_r, axe));
    }
    else {
      u2_noun zet = _lily_hike_belt_root(wir_r, pac);

      if ( u2_nul != zet ) {
        u2_noun fol = u2_rx(wir_r, u2_h(zet));

        u2_rl_lose(wir_r, zet);
        return fol;
      }
      else {
        u2_noun tum = _lily_hike_belt_l(wir_r, pac);
        u2_noun gam = _lily_hike_belt_r(wir_r, pac);
        u2_noun hax = j2_mbc(Pt3, peg)(wir_r, axe, 2);
        u2_noun moz = j2_mbc(Pt3, peg)(wir_r, axe, 3);
        u2_noun zip = j2_mby(Pt6, hike)(wir_r, hax, tum);
        u2_noun dof = j2_mby(Pt6, hike)(wir_r, moz, gam);
        u2_noun fol = j2_mby(Pt6, cons)(wir_r, zip, dof);

        u2_rl_lose(wir_r, tum);
        u2_rl_lose(wir_r, gam);
        u2_rl_lose(wir_r, hax);
        u2_rl_lose(wir_r, moz);
        u2_rl_lose(wir_r, zip);
        u2_rl_lose(wir_r, dof);

        return fol;
      }
    }
  }