Changeset 2037


Ignore:
Timestamp:
Jul 27, 2006, 4:45:55 PM (14 years ago)
Author:
orlov
Message:
  • Added List.Replicate function.
Location:
to-imperative/trunk/library/List
Files:
4 edited

Legend:

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

    r1991 r2037  
    11#include <rf_core.hh>
     2#include <refal/Access.hh>
    23#include <refal/Apply.hh>
     4#include <refal/Compare.hh>
    35#include <refal/Arithm.hh>
    4 #include <refal/Access.hh>
    5 #include "List.hh"
    66
    77namespace refal
     
    1616
    1717RF_DECL (Paren_m_Term);
     18
     19RF_DECL (Zip);
     20
     21RF_DECL (Map);
     22
     23RF_DECL (Filter);
     24
     25RF_DECL (Split);
     26
     27RF_DECL (Elem_q_);
     28
     29RF_DECL (Get_m_Elem);
     30
     31RF_DECL (Foldr);
     32
     33RF_DECL (Foldr1);
     34
     35RF_DECL (Concat);
     36
     37RF_DECL (Paren);
     38
     39RF_DECL (Reverse);
     40
     41RF_DECL (Intersperse);
     42
     43RF_DECL (Nub);
     44
     45RF_DECL (Replicate);
     46
     47RF_DECL (Entries);
     48
     49RF_DECL (Or);
     50
     51RF_DECL (And);
     52
     53RF_DECL (Sub);
    1854
    1955RF_DECL (Paren_m_Term__0);
     
    238274
    239275RF_FUNC (Elem_q_, (RF_ARG _ve_list, _vt_item;;), RF_VOID)
    240   if ((_ve_list.get_len () < 1))
     276  if (((_ve_list.get_len () < (1 + 0 + 0))))
    241277  {
    242278    RF_RETFAIL;
     
    252288      uintptr_t _v_len1 = _v_lsplit__list.get_len ();
    253289      uintptr_t _v_len2 = 1;
    254       if ((_v_len1 < _v_len2))
     290      if (((_v_len1 < (_v_len2 + (0 * 1)))))
    255291      {
    256292        RF_RETFAIL;
    257293      }
    258       uintptr_t _v_len___e__e_tmp_m_Listrf_m_56_m_22 = (_v_len1 - _v_len2);
     294      if (((_v_len1 - _v_len2) % 1))
     295      {
     296        goto _continue1;
     297      }
     298      uintptr_t _v_len___e__e_tmp_m_Listrf_m_56_m_22 = ((_v_len1 - _v_len2) / 1);
    259299      if (!_vt_item.term_eq (_v_lsplit__list, 0))
    260300      {
    261301        goto _continue1;
    262302      }
    263       Expr _ve__e__e_tmp_m_Listrf_m_56_m_22 (_v_lsplit__list, 1, _v_len___e__e_tmp_m_Listrf_m_56_m_22);
     303      Expr _ve__e__e_tmp_m_Listrf_m_56_m_22 (_v_lsplit__list, (0 + 1), _v_len___e__e_tmp_m_Listrf_m_56_m_22);
    264304      goto _exit1;
    265305    }
     
    468508RF_END
    469509
     510RF_FUNC (Replicate, (RF_ARG _vs_n, _ve_expr;;), (RF_RES _v_res1;;))
     511  Expr _v_n__1 (_vs_n);
     512  Expr _ve_list (empty);
     513  for ( ; ; )
     514  {
     515    {
     516      if (!RF_CALL (Compare::_lt__eq_, (_v_n__1, _c_2), /*void*/))
     517      {
     518        goto _iter1;
     519      }
     520      _v_res1 = _ve_list;
     521      goto _exit__iter1;
     522    }
     523  _iter1: {}
     524    RF_CALL (Arithm::_m_, (_v_n__1, _c_3), _v_n__1);
     525    _ve_list = (_ve_list + _ve_expr);
     526  }
     527_exit__iter1: {}
     528RF_END
     529
    470530RF_FUNC (Entries, (RF_ARG _ve_expr, _ve_source;;), (RF_RES _v_res1, _v_res2;;))
    471531  Expr _vs_num (_c_2);
     
    558618          goto _block2__branch1;
    559619        }
    560         RF_lsplit (_v_list1__1, 0, _ve__e__e_tmp_m_Listrf_m_120_m_20, _v_lsplit__list1__1);
     620        RF_lsplit (_v_list1__1, 0, _ve__e__e_tmp_m_Listrf_m_127_m_20, _v_lsplit__list1__1);
    561621        for ( ; ; RF_iter(_v_list1__1)++)
    562622        {
     
    572632              goto _block2__branch1;
    573633            }
    574             uintptr_t _v_len___e__e_tmp_m_Listrf_m_120_m_27 = (_v_len3 - _v_len4);
     634            uintptr_t _v_len___e__e_tmp_m_Listrf_m_127_m_27 = (_v_len3 - _v_len4);
    575635            if (!_vt_erm.term_eq (_v_lsplit__list1__1, 0))
    576636            {
    577637              goto _continue1;
    578638            }
    579             Expr _ve__e__e_tmp_m_Listrf_m_120_m_27 (_v_lsplit__list1__1, 1, _v_len___e__e_tmp_m_Listrf_m_120_m_27);
     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);
    580640            _v_list2__1 = _ve_rest;
    581641            goto _exit1;
     
    624684          goto _block2__branch1;
    625685        }
    626         RF_lsplit (_ve_list2, 0, _ve__e__e_tmp_m_Listrf_m_134_m_20, _v_lsplit__list2);
     686        RF_lsplit (_ve_list2, 0, _ve__e__e_tmp_m_Listrf_m_141_m_20, _v_lsplit__list2);
    627687        for ( ; ; RF_iter(_ve_list2)++)
    628688        {
     
    638698              goto _block2__branch1;
    639699            }
    640             uintptr_t _v_len___e__e_tmp_m_Listrf_m_134_m_27 = (_v_len3 - _v_len4);
     700            uintptr_t _v_len___e__e_tmp_m_Listrf_m_141_m_27 = (_v_len3 - _v_len4);
    641701            if (!_vt_erm.term_eq (_v_lsplit__list2, 0))
    642702            {
    643703              goto _continue1;
    644704            }
    645             Expr _ve__e__e_tmp_m_Listrf_m_134_m_27 (_v_lsplit__list2, 1, _v_len___e__e_tmp_m_Listrf_m_134_m_27);
     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);
    646706            _v_list1__1 = _ve_rest;
    647707            _ve_and = (_ve_and + _vt_erm);
     
    690750          goto _block2__branch1;
    691751        }
    692         RF_lsplit (_ve_list2, 0, _ve__e__e_tmp_m_Listrf_m_148_m_20, _v_lsplit__list2);
     752        RF_lsplit (_ve_list2, 0, _ve__e__e_tmp_m_Listrf_m_155_m_20, _v_lsplit__list2);
    693753        for ( ; ; RF_iter(_ve_list2)++)
    694754        {
     
    704764              goto _block2__branch1;
    705765            }
    706             uintptr_t _v_len___e__e_tmp_m_Listrf_m_148_m_27 = (_v_len3 - _v_len4);
     766            uintptr_t _v_len___e__e_tmp_m_Listrf_m_155_m_27 = (_v_len3 - _v_len4);
    707767            if (!_vt_erm.term_eq (_v_lsplit__list2, 0))
    708768            {
    709769              goto _continue1;
    710770            }
    711             Expr _ve__e__e_tmp_m_Listrf_m_148_m_27 (_v_lsplit__list2, 1, _v_len___e__e_tmp_m_Listrf_m_148_m_27);
     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);
    712772            _v_list1__1 = _ve_rest;
    713773            goto _exit1;
  • to-imperative/trunk/library/List/List.hh

    r1830 r2037  
    3838RF_DECL (Nub);
    3939
     40RF_DECL (Replicate);
     41
    4042RF_DECL (Entries);
    4143
  • to-imperative/trunk/library/List/refal/List.rf

    r1830 r2037  
    33// $Date$
    44
    5 $use Apply Access Arithm;
     5$use Apply Access Arithm Compare;
    66
    77$func Deparen-Term term = expr;
     
    100100  e.selected;
    101101
     102Replicate s.n e.expr =
     103  s.n /*e.list*/ $iter
     104    <"-" s.n 1> e.list e.expr
     105  :: s.n e.list,
     106  <"<=" (s.n) (0)> =
     107  e.list;
     108
    102109/*
    103110 * Returns number of e.expr entries in e.source and e.source without all e.expr's.
  • to-imperative/trunk/library/List/refal/List.rfi

    r1830 r2037  
    2929$func Nub e.expr = e.selected;
    3030
     31$func Replicate s.n e.expr = e.list;
     32
    3133// Returns number of e.expr entries in e.source and e.source without all e.expr's.
    3234$func Entries e.expr (e.source) = s.num e.res;
Note: See TracChangeset for help on using the changeset viewer.