up

A priority search queue and LRU cache.
git clone git://git.jtobin.io/up.git
Log | Files | Refs

up_qor_see.c (1252B)


      1 #include "all.h"
      2 
      3 u3_noun
      4 u3qdu_qor_see(u3_noun a)
      5 {
      6   if (u3_nul == a) {
      7     return u3_nul;
      8   }
      9 
     10   u3_noun n_a, t_a, m_a;
     11   u3x_trel(a, &n_a, &t_a, &m_a);
     12 
     13   if (u3_nul == t_a) {
     14     return u3nc(c3__sing, u3k(n_a));
     15   }
     16 
     17   u3_atom hot = u3h(t_a);
     18 
     19   if ( c3n == u3ud(hot) ) {
     20     return u3m_bail(c3__exit);
     21   }
     22   else switch ( hot ) {
     23     default:
     24       return u3m_bail(c3__exit);
     25 
     26     case c3__llos: {
     27       u3_noun p_t_a = u3t(u3t(t_a));
     28 
     29       u3_noun n_p_t_a, l_p_t_a, m_p_t_a, r_p_t_a;
     30       u3x_qual(p_t_a, &n_p_t_a, &l_p_t_a, &m_p_t_a, &r_p_t_a);
     31 
     32       return u3nt(
     33                c3__play,
     34                u3nt(u3k(n_p_t_a), u3k(l_p_t_a), u3k(m_p_t_a)),
     35                u3nt(u3k(n_a), u3k(r_p_t_a), u3k(m_a)));
     36     }
     37 
     38     case c3__rlos: {
     39       u3_noun p_t_a = u3t(u3t(t_a));
     40 
     41       u3_noun n_p_t_a, l_p_t_a, m_p_t_a, r_p_t_a;
     42       u3x_qual(p_t_a, &n_p_t_a, &l_p_t_a, &m_p_t_a, &r_p_t_a);
     43 
     44       return u3nt(
     45                c3__play,
     46                u3nt(u3k(n_a), u3k(l_p_t_a), u3k(m_p_t_a)),
     47                u3nt(u3k(n_p_t_a), u3k(r_p_t_a), u3k(m_a)));
     48     }
     49   }
     50 }
     51 
     52 u3_noun
     53 u3wdu_qor_see(u3_noun cor)
     54 {
     55   u3_noun a;
     56 
     57   if (c3n == u3r_mean(cor, u3x_sam, &a, 0))
     58   {
     59     return u3m_bail(c3__exit);
     60   } else {
     61     return u3qdu_qor_see(a);
     62   }
     63 }
     64