u3: rewrites +flop jet using new list iteration idiom
*/
#include "all.h"
-
-/* functions
-*/
u3_noun
u3qb_flop(u3_noun a)
{
- u3_noun b = 0;
+ u3_noun i, t = a, b = u3_nul;
- while ( 1 ) {
- if ( u3_nul == a ) {
- return b;
+ while ( u3_nul != t ) {
+ u3x_cell(t, &i, &t);
+ b = u3nc(u3k(i), b);
}
- else if ( c3n == u3du(a) ) {
- u3z(b);
- return u3m_bail(c3__exit);
- }
- else {
- b = u3nc(u3k(u3h(a)), b);
- a = u3t(a);
- }
- }
+ return b;
}
+
u3_noun
u3wb_flop(u3_noun cor)
{
- u3_noun a;
-
- if ( u3_none == (a = u3r_at(u3x_sam, cor)) ) {
- return u3m_bail(c3__exit);
- } else {
- return u3qb_flop(a);
- }
+ return u3qb_flop(u3x_at(u3x_sam, cor));
}
+
u3_noun
u3kb_flop(u3_noun a)
{
u3_noun b = u3qb_flop(a);
-
u3z(a);
return b;
}
-
