Changeset 2044


Ignore:
Timestamp:
Aug 1, 2006, 9:31:01 PM (14 years ago)
Author:
orlov
Message:
  • Improved Intersperse.
Location:
to-imperative/trunk/library/List
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • to-imperative/trunk/library/List/List.cc

    r2037 r2044  
    404404RF_END
    405405
    406 RF_FUNC (Intersperse, (RF_ARG _ve_sep, _ve_list;;), (RF_RES _v_res1;;))
    407   Expr _ve_new_m_list (empty);
    408   Expr _v_list__1 (_ve_list);
    409   for ( ; ; )
    410   {
    411     {
    412       if ((_v_list__1.get_len () != 0))
    413       {
    414         goto _iter1;
    415       }
    416       _v_res1 = _ve_new_m_list;
    417       goto _exit__iter1;
    418     }
    419   _iter1: {}
    420     {
    421       {
    422         uintptr_t _v_len1 = _v_list__1.get_len ();
    423         uintptr_t _v_len2 = 1;
    424         if ((_v_len1 < (_v_len2 + 1)))
    425         {
    426           goto _block1__branch1;
    427         }
    428         uintptr_t _v_len__2 = (_v_len1 - _v_len2);
    429         Expr _vt_1 (_v_list__1, 0, 1);
    430         Expr _vv_2 (_v_list__1, 1, _v_len__2);
    431         _ve_new_m_list = (_ve_new_m_list + _vt_1 + _ve_sep);
    432         _v_list__1 = _vv_2;
    433         goto _block1;
    434       }
    435     _block1__branch1: {}
    436       _ve_new_m_list = (_ve_new_m_list + _v_list__1);
    437       _v_list__1 = empty;
    438     }
    439   _block1: {}
    440   }
    441 _exit__iter1: {}
     406RF_FUNC (Intersperse, (RF_ARG _v_arg1, _v_arg2;;), (RF_RES _v_res1;;))
     407  {
     408    {
     409      if (((_v_arg2.get_len () + 1) != 1))
     410      {
     411        goto _block1__branch1;
     412      }
     413      Expr _v_compose1 ((_v_arg1 () + _v_arg2));
     414      if (_v_compose1.symbol_at (0))
     415      {
     416        goto _block1__branch1;
     417      }
     418      Expr _v_deref__compose1 (_v_compose1, 0);
     419      uintptr_t _v_len1 = _v_deref__compose1.get_len ();
     420      uintptr_t _v_len2 = 0;
     421      if ((_v_len1 < _v_len2))
     422      {
     423        goto _block1__branch1;
     424      }
     425      uintptr_t _v_len__sep = (_v_len1 - _v_len2);
     426      Expr _ve_sep (_v_deref__compose1, 0, _v_len__sep);
     427      _v_res1 = empty;
     428      goto _block1;
     429    }
     430  _block1__branch1: {}
     431    {
     432      if (((_v_arg2.get_len () + 1) != 2))
     433      {
     434        goto _block1__branch2;
     435      }
     436      Expr _v_compose2 ((_v_arg1 () + _v_arg2));
     437      if (_v_compose2.symbol_at (0))
     438      {
     439        goto _block1__branch2;
     440      }
     441      Expr _v_deref__compose2 (_v_compose2, 0);
     442      uintptr_t _v_len3 = _v_deref__compose2.get_len ();
     443      uintptr_t _v_len4 = 0;
     444      if ((_v_len3 < _v_len4))
     445      {
     446        goto _block1__branch2;
     447      }
     448      uintptr_t _v_len__sep2 = (_v_len3 - _v_len4);
     449      Expr _vt_1 (_v_compose2, 1, 1);
     450      Expr _ve_sep (_v_deref__compose2, 0, _v_len__sep2);
     451      _v_res1 = _vt_1;
     452      goto _block1;
     453    }
     454  _block1__branch2: {}
     455    uintptr_t _v_len5 = (_v_arg2.get_len () + 1);
     456    uintptr_t _v_len6 = 2;
     457    if ((_v_len5 < _v_len6))
     458    {
     459      RF_FUNC_ERROR (unexpected_fail);
     460    }
     461    uintptr_t _v_len__list = (_v_len5 - _v_len6);
     462    Expr _v_compose3 ((_v_arg1 () + _v_arg2));
     463    if (_v_compose3.symbol_at (0))
     464    {
     465      RF_FUNC_ERROR (unexpected_fail);
     466    }
     467    Expr _v_deref__compose3 (_v_compose3, 0);
     468    uintptr_t _v_len7 = _v_deref__compose3.get_len ();
     469    uintptr_t _v_len8 = 0;
     470    if ((_v_len7 < _v_len8))
     471    {
     472      RF_FUNC_ERROR (unexpected_fail);
     473    }
     474    uintptr_t _v_len__sep3 = (_v_len7 - _v_len8);
     475    Expr _vt_1 (_v_compose3, 1, 1);
     476    Expr _ve_list (_v_compose3, 2, _v_len__list);
     477    Expr _ve_sep (_v_deref__compose3, 0, _v_len__sep3);
     478    Expr _ve_new_m_list ((_vt_1 + _ve_sep));
     479    for ( ; ; )
     480    {
     481      {
     482        if ((_ve_list.get_len () != 1))
     483        {
     484          goto _iter1;
     485        }
     486        Expr _vt_2 (_ve_list, 0, 1);
     487        _v_res1 = (_ve_new_m_list + _vt_2);
     488        goto _exit__iter1;
     489      }
     490    _iter1: {}
     491      uintptr_t _v_len9 = _ve_list.get_len ();
     492      uintptr_t _v_len10 = 1;
     493      if ((_v_len9 < _v_len10))
     494      {
     495        RF_FUNC_ERROR (unexpected_fail);
     496      }
     497      uintptr_t _v_len__rest = (_v_len9 - _v_len10);
     498      Expr _vt_2 (_ve_list, 0, 1);
     499      Expr _ve_rest (_ve_list, 1, _v_len__rest);
     500      _ve_new_m_list = (_ve_new_m_list + _vt_2 + _ve_sep);
     501      _ve_list = _ve_rest;
     502    }
     503  _exit__iter1: {}
     504  }
     505_block1: {}
    442506RF_END
    443507
     
    471535          goto _block2__branch1;
    472536        }
    473         RF_lsplit (_ve_selected, 0, _ve__e__e_tmp_m_Listrf_m_95_m_21, _v_lsplit__selected);
     537        RF_lsplit (_ve_selected, 0, _ve__e__e_tmp_m_Listrf_m_98_m_21, _v_lsplit__selected);
    474538        for ( ; ; RF_iter(_ve_selected)++)
    475539        {
     
    485549              goto _block2__branch1;
    486550            }
    487             uintptr_t _v_len___e__e_tmp_m_Listrf_m_95_m_28 = (_v_len3 - _v_len4);
     551            uintptr_t _v_len___e__e_tmp_m_Listrf_m_98_m_28 = (_v_len3 - _v_len4);
    488552            if (!_vt_erm.term_eq (_v_lsplit__selected, 0))
    489553            {
    490554              goto _continue1;
    491555            }
    492             Expr _ve__e__e_tmp_m_Listrf_m_95_m_28 (_v_lsplit__selected, 1, _v_len___e__e_tmp_m_Listrf_m_95_m_28);
     556            Expr _ve__e__e_tmp_m_Listrf_m_98_m_28 (_v_lsplit__selected, 1, _v_len___e__e_tmp_m_Listrf_m_98_m_28);
    493557            _v_expr__1 = _ve_rest;
    494558            goto _exit1;
     
    618682          goto _block2__branch1;
    619683        }
    620         RF_lsplit (_v_list1__1, 0, _ve__e__e_tmp_m_Listrf_m_127_m_20, _v_lsplit__list1__1);
     684        RF_lsplit (_v_list1__1, 0, _ve__e__e_tmp_m_Listrf_m_130_m_20, _v_lsplit__list1__1);
    621685        for ( ; ; RF_iter(_v_list1__1)++)
    622686        {
     
    632696              goto _block2__branch1;
    633697            }
    634             uintptr_t _v_len___e__e_tmp_m_Listrf_m_127_m_27 = (_v_len3 - _v_len4);
     698            uintptr_t _v_len___e__e_tmp_m_Listrf_m_130_m_27 = (_v_len3 - _v_len4);
    635699            if (!_vt_erm.term_eq (_v_lsplit__list1__1, 0))
    636700            {
    637701              goto _continue1;
    638702            }
    639             Expr _ve__e__e_tmp_m_Listrf_m_127_m_27 (_v_lsplit__list1__1, 1, _v_len___e__e_tmp_m_Listrf_m_127_m_27);
     703            Expr _ve__e__e_tmp_m_Listrf_m_130_m_27 (_v_lsplit__list1__1, 1, _v_len___e__e_tmp_m_Listrf_m_130_m_27);
    640704            _v_list2__1 = _ve_rest;
    641705            goto _exit1;
     
    684748          goto _block2__branch1;
    685749        }
    686         RF_lsplit (_ve_list2, 0, _ve__e__e_tmp_m_Listrf_m_141_m_20, _v_lsplit__list2);
     750        RF_lsplit (_ve_list2, 0, _ve__e__e_tmp_m_Listrf_m_144_m_20, _v_lsplit__list2);
    687751        for ( ; ; RF_iter(_ve_list2)++)
    688752        {
     
    698762              goto _block2__branch1;
    699763            }
    700             uintptr_t _v_len___e__e_tmp_m_Listrf_m_141_m_27 = (_v_len3 - _v_len4);
     764            uintptr_t _v_len___e__e_tmp_m_Listrf_m_144_m_27 = (_v_len3 - _v_len4);
    701765            if (!_vt_erm.term_eq (_v_lsplit__list2, 0))
    702766            {
    703767              goto _continue1;
    704768            }
    705             Expr _ve__e__e_tmp_m_Listrf_m_141_m_27 (_v_lsplit__list2, 1, _v_len___e__e_tmp_m_Listrf_m_141_m_27);
     769            Expr _ve__e__e_tmp_m_Listrf_m_144_m_27 (_v_lsplit__list2, 1, _v_len___e__e_tmp_m_Listrf_m_144_m_27);
    706770            _v_list1__1 = _ve_rest;
    707771            _ve_and = (_ve_and + _vt_erm);
     
    750814          goto _block2__branch1;
    751815        }
    752         RF_lsplit (_ve_list2, 0, _ve__e__e_tmp_m_Listrf_m_155_m_20, _v_lsplit__list2);
     816        RF_lsplit (_ve_list2, 0, _ve__e__e_tmp_m_Listrf_m_158_m_20, _v_lsplit__list2);
    753817        for ( ; ; RF_iter(_ve_list2)++)
    754818        {
     
    764828              goto _block2__branch1;
    765829            }
    766             uintptr_t _v_len___e__e_tmp_m_Listrf_m_155_m_27 = (_v_len3 - _v_len4);
     830            uintptr_t _v_len___e__e_tmp_m_Listrf_m_158_m_27 = (_v_len3 - _v_len4);
    767831            if (!_vt_erm.term_eq (_v_lsplit__list2, 0))
    768832            {
    769833              goto _continue1;
    770834            }
    771             Expr _ve__e__e_tmp_m_Listrf_m_155_m_27 (_v_lsplit__list2, 1, _v_len___e__e_tmp_m_Listrf_m_155_m_27);
     835            Expr _ve__e__e_tmp_m_Listrf_m_158_m_27 (_v_lsplit__list2, 1, _v_len___e__e_tmp_m_Listrf_m_158_m_27);
    772836            _v_list1__1 = _ve_rest;
    773837            goto _exit1;
  • to-imperative/trunk/library/List/refal/List.rf

    r2037 r2044  
    8181};
    8282
    83 Intersperse (e.sep) e.list =
    84   (/*e.new-list*/) e.list $iter {
    85     e.list : t1 v2 =
    86       (e.new-list t1 e.sep) v2;
    87     (e.new-list e.list);
    88   } :: (e.new-list) e.list,
    89   e.list : /*empty*/ =
    90   e.new-list;
     83Intersperse {
     84  (e.sep) /*empty*/ = /*empty*/;
     85  (e.sep) t1 = t1;
     86  (e.sep) t1 e.list =
     87    (t1 e.sep) e.list $iter {
     88      e.list : t2 e.rest =
     89        (e.new-list t2 e.sep) e.rest;
     90    } :: (e.new-list) e.list,
     91    e.list : t2 =
     92    e.new-list t2;
     93};
    9194
    9295Nub e.expr =
Note: See TracChangeset for help on using the changeset viewer.