Changeset 1830


Ignore:
Timestamp:
Jan 19, 2006, 4:03:25 AM (15 years ago)
Author:
orlov
Message:
  • <Intersperse> function has been added; <Concat> has been improved.
Location:
to-imperative/trunk/library
Files:
6 edited

Legend:

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

    r1778 r1830  
    3131static Expr _c_4;
    3232
    33 RF_FUNC (Deparen_m_Term, (RF_ARG _ve_xpr;;), (RF_RES _v_res1;;))
    34   _v_res1 = _ve_xpr;
     33RF_FUNC (Deparen_m_Term, (RF_ARG _v_arg1;;), (RF_RES _v_res1;;))
     34  {
     35    {
     36      if (_v_arg1.symbol_at (0))
     37      {
     38        goto _block1__branch1;
     39      }
     40      Expr _v_deref__arg1 (_v_arg1, 0);
     41      uintptr_t _v_len1 = _v_deref__arg1.get_len ();
     42      uintptr_t _v_len2 = 0;
     43      if ((_v_len1 < _v_len2))
     44      {
     45        goto _block1__branch1;
     46      }
     47      uintptr_t _v_len__xpr = (_v_len1 - _v_len2);
     48      Expr _ve_xpr (_v_deref__arg1, 0, _v_len__xpr);
     49      _v_res1 = _ve_xpr;
     50      goto _block1;
     51    }
     52  _block1__branch1: {}
     53    _v_res1 = _v_arg1;
     54  }
     55_block1: {}
    3556RF_END
    3657
     
    5879    if ((_v_len1 < _v_len2))
    5980    {
    60       RF_ERROR (Expr::create<Word>("List") + Expr::create<Word>("Zip") + unexpected_fail);
     81      RF_FUNC_ERROR (unexpected_fail);
    6182    }
    6283    uintptr_t _v_len__rest2 = (_v_len1 - _v_len2);
     
    6586    if ((_v_len3 < _v_len4))
    6687    {
    67       RF_ERROR (Expr::create<Word>("List") + Expr::create<Word>("Zip") + unexpected_fail);
     88      RF_FUNC_ERROR (unexpected_fail);
    6889    }
    6990    uintptr_t _v_len__rest1 = (_v_len3 - _v_len4);
     
    97118    if ((_v_len1 < _v_len2))
    98119    {
    99       RF_ERROR (Expr::create<Word>("List") + Expr::create<Word>("Map") + unexpected_fail);
     120      RF_FUNC_ERROR (unexpected_fail);
    100121    }
    101122    uintptr_t _v_len__rest = (_v_len1 - _v_len2);
     
    105126    if (!RF_CALL (Apply::Apply, (_vs_Fname, (_ve_Fargs + _vt_item)), _v_Apply1))
    106127    {
    107       RF_ERROR (Expr::create<Word>("List") + Expr::create<Word>("Map") + unexpected_fail);
     128      RF_FUNC_ERROR (unexpected_fail);
    108129    }
    109130    _ve_new_m_list = (_ve_new_m_list + _v_Apply1);
     
    131152    if ((_v_len1 < _v_len2))
    132153    {
    133       RF_ERROR (Expr::create<Word>("List") + Expr::create<Word>("Filter") + unexpected_fail);
     154      RF_FUNC_ERROR (unexpected_fail);
    134155    }
    135156    uintptr_t _v_len__rest = (_v_len1 - _v_len2);
     
    149170          goto _block2__branch1;
    150171        }
    151         uintptr_t _v_len___e__e_tmp_m_Listrf_m_33_m_41 = (_v_len3 - _v_len4);
    152         Expr _ve__e__e_tmp_m_Listrf_m_33_m_41 (_v_Apply1, 0, _v_len___e__e_tmp_m_Listrf_m_33_m_41);
     172        uintptr_t _v_len___e__e_tmp_m_Listrf_m_36_m_41 = (_v_len3 - _v_len4);
     173        Expr _ve__e__e_tmp_m_Listrf_m_36_m_41 (_v_Apply1, 0, _v_len___e__e_tmp_m_Listrf_m_36_m_41);
    153174        _ve_new_m_list = (_ve_new_m_list + _vt_item);
    154175        _v_list__1 = _ve_rest;
     
    183204    if ((_v_len1 < _v_len2))
    184205    {
    185       RF_ERROR (Expr::create<Word>("List") + Expr::create<Word>("Split") + unexpected_fail);
     206      RF_FUNC_ERROR (unexpected_fail);
    186207    }
    187208    uintptr_t _v_len__rest = (_v_len1 - _v_len2);
     
    201222          goto _block2__branch1;
    202223        }
    203         uintptr_t _v_len___e__e_tmp_m_Listrf_m_44_m_41 = (_v_len3 - _v_len4);
    204         Expr _ve__e__e_tmp_m_Listrf_m_44_m_41 (_v_Apply1, 0, _v_len___e__e_tmp_m_Listrf_m_44_m_41);
     224        uintptr_t _v_len___e__e_tmp_m_Listrf_m_47_m_41 = (_v_len3 - _v_len4);
     225        Expr _ve__e__e_tmp_m_Listrf_m_47_m_41 (_v_Apply1, 0, _v_len___e__e_tmp_m_Listrf_m_47_m_41);
    205226        _ve_true_m_list = (_ve_true_m_list + _vt_item);
    206227        _v_list__1 = _ve_rest;
     
    221242    RF_RETFAIL;
    222243  }
    223   lsplit (_ve_list, 0, _ve__e__e_tmp_m_Listrf_m_53_m_13, _v_lsplit__list);
     244  lsplit (_ve_list, 0, _ve__e__e_tmp_m_Listrf_m_56_m_13, _v_lsplit__list);
    224245  for ( ; ; iter(_ve_list)++)
    225246  {
     
    235256        RF_RETFAIL;
    236257      }
    237       uintptr_t _v_len___e__e_tmp_m_Listrf_m_53_m_22 = (_v_len1 - _v_len2);
     258      uintptr_t _v_len___e__e_tmp_m_Listrf_m_56_m_22 = (_v_len1 - _v_len2);
    238259      if (!_vt_item.term_eq (_v_lsplit__list, 0))
    239260      {
    240261        goto _continue1;
    241262      }
    242       Expr _ve__e__e_tmp_m_Listrf_m_53_m_22 (_v_lsplit__list, 1, _v_len___e__e_tmp_m_Listrf_m_53_m_22);
     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);
    243264      goto _exit1;
    244265    }
     
    251272  if (!RF_CALL (Access::L, (_vs_num, _ve_list), _v_res1))
    252273  {
    253     RF_ERROR (Expr::create<Word>("List") + Expr::create<Word>("Get-Elem") + unexpected_fail);
     274    RF_FUNC_ERROR (unexpected_fail);
    254275  }
    255276RF_END
     
    273294    if ((_v_len1 < _v_len2))
    274295    {
    275       RF_ERROR (Expr::create<Word>("List") + Expr::create<Word>("Foldr") + unexpected_fail);
     296      RF_FUNC_ERROR (unexpected_fail);
    276297    }
    277298    uintptr_t _v_len__something = (_v_len1 - _v_len2);
     
    280301    if (!RF_CALL (Apply::Apply, (_vs_Fname, (_ve_Fargs + _vt_last + _v_value__1)), _v_value__1))
    281302    {
    282       RF_ERROR (Expr::create<Word>("List") + Expr::create<Word>("Foldr") + unexpected_fail);
     303      RF_FUNC_ERROR (unexpected_fail);
    283304    }
    284305    _v_list__1 = _ve_something;
     
    336357    if ((_v_arg1.get_len () != 0))
    337358    {
    338       RF_ERROR (Expr::create<Word>("List") + Expr::create<Word>("Reverse") + unexpected_fail);
     359      RF_FUNC_ERROR (unexpected_fail);
    339360    }
    340361    _v_res1 = empty;
    341362  }
    342363_block1: {}
     364RF_END
     365
     366RF_FUNC (Intersperse, (RF_ARG _ve_sep, _ve_list;;), (RF_RES _v_res1;;))
     367  Expr _ve_new_m_list (empty);
     368  Expr _v_list__1 (_ve_list);
     369  for ( ; ; )
     370  {
     371    {
     372      if ((_v_list__1.get_len () != 0))
     373      {
     374        goto _iter1;
     375      }
     376      _v_res1 = _ve_new_m_list;
     377      goto _exit__iter1;
     378    }
     379  _iter1: {}
     380    {
     381      {
     382        uintptr_t _v_len1 = _v_list__1.get_len ();
     383        uintptr_t _v_len2 = 1;
     384        if ((_v_len1 < (_v_len2 + 1)))
     385        {
     386          goto _block1__branch1;
     387        }
     388        uintptr_t _v_len__2 = (_v_len1 - _v_len2);
     389        Expr _vt_1 (_v_list__1, 0, 1);
     390        Expr _vv_2 (_v_list__1, 1, _v_len__2);
     391        _ve_new_m_list = (_ve_new_m_list + _vt_1 + _ve_sep);
     392        _v_list__1 = _vv_2;
     393        goto _block1;
     394      }
     395    _block1__branch1: {}
     396      _ve_new_m_list = (_ve_new_m_list + _v_list__1);
     397      _v_list__1 = empty;
     398    }
     399  _block1: {}
     400  }
     401_exit__iter1: {}
    343402RF_END
    344403
     
    361420    if ((_v_len1 < _v_len2))
    362421    {
    363       RF_ERROR (Expr::create<Word>("List") + Expr::create<Word>("Nub") + unexpected_fail);
     422      RF_FUNC_ERROR (unexpected_fail);
    364423    }
    365424    uintptr_t _v_len__rest = (_v_len1 - _v_len2);
     
    372431          goto _block2__branch1;
    373432        }
    374         lsplit (_ve_selected, 0, _ve__e__e_tmp_m_Listrf_m_83_m_21, _v_lsplit__selected);
     433        lsplit (_ve_selected, 0, _ve__e__e_tmp_m_Listrf_m_95_m_21, _v_lsplit__selected);
    375434        for ( ; ; iter(_ve_selected)++)
    376435        {
     
    386445              goto _block2__branch1;
    387446            }
    388             uintptr_t _v_len___e__e_tmp_m_Listrf_m_83_m_28 = (_v_len3 - _v_len4);
     447            uintptr_t _v_len___e__e_tmp_m_Listrf_m_95_m_28 = (_v_len3 - _v_len4);
    389448            if (!_vt_erm.term_eq (_v_lsplit__selected, 0))
    390449            {
    391450              goto _continue1;
    392451            }
    393             Expr _ve__e__e_tmp_m_Listrf_m_83_m_28 (_v_lsplit__selected, 1, _v_len___e__e_tmp_m_Listrf_m_83_m_28);
     452            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);
    394453            _v_expr__1 = _ve_rest;
    395454            goto _exit1;
     
    488547    if ((_v_len1 < _v_len2))
    489548    {
    490       RF_ERROR (Expr::create<Word>("List") + Expr::create<Word>("Or") + unexpected_fail);
     549      RF_FUNC_ERROR (unexpected_fail);
    491550    }
    492551    uintptr_t _v_len__rest = (_v_len1 - _v_len2);
     
    499558          goto _block2__branch1;
    500559        }
    501         lsplit (_v_list1__1, 0, _ve__e__e_tmp_m_Listrf_m_108_m_20, _v_lsplit__list1__1);
     560        lsplit (_v_list1__1, 0, _ve__e__e_tmp_m_Listrf_m_120_m_20, _v_lsplit__list1__1);
    502561        for ( ; ; iter(_v_list1__1)++)
    503562        {
     
    513572              goto _block2__branch1;
    514573            }
    515             uintptr_t _v_len___e__e_tmp_m_Listrf_m_108_m_27 = (_v_len3 - _v_len4);
     574            uintptr_t _v_len___e__e_tmp_m_Listrf_m_120_m_27 = (_v_len3 - _v_len4);
    516575            if (!_vt_erm.term_eq (_v_lsplit__list1__1, 0))
    517576            {
    518577              goto _continue1;
    519578            }
    520             Expr _ve__e__e_tmp_m_Listrf_m_108_m_27 (_v_lsplit__list1__1, 1, _v_len___e__e_tmp_m_Listrf_m_108_m_27);
     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);
    521580            _v_list2__1 = _ve_rest;
    522581            goto _exit1;
     
    554613    if ((_v_len1 < _v_len2))
    555614    {
    556       RF_ERROR (Expr::create<Word>("List") + Expr::create<Word>("And") + unexpected_fail);
     615      RF_FUNC_ERROR (unexpected_fail);
    557616    }
    558617    uintptr_t _v_len__rest = (_v_len1 - _v_len2);
     
    565624          goto _block2__branch1;
    566625        }
    567         lsplit (_ve_list2, 0, _ve__e__e_tmp_m_Listrf_m_122_m_20, _v_lsplit__list2);
     626        lsplit (_ve_list2, 0, _ve__e__e_tmp_m_Listrf_m_134_m_20, _v_lsplit__list2);
    568627        for ( ; ; iter(_ve_list2)++)
    569628        {
     
    579638              goto _block2__branch1;
    580639            }
    581             uintptr_t _v_len___e__e_tmp_m_Listrf_m_122_m_27 = (_v_len3 - _v_len4);
     640            uintptr_t _v_len___e__e_tmp_m_Listrf_m_134_m_27 = (_v_len3 - _v_len4);
    582641            if (!_vt_erm.term_eq (_v_lsplit__list2, 0))
    583642            {
    584643              goto _continue1;
    585644            }
    586             Expr _ve__e__e_tmp_m_Listrf_m_122_m_27 (_v_lsplit__list2, 1, _v_len___e__e_tmp_m_Listrf_m_122_m_27);
     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);
    587646            _v_list1__1 = _ve_rest;
    588647            _ve_and = (_ve_and + _vt_erm);
     
    620679    if ((_v_len1 < _v_len2))
    621680    {
    622       RF_ERROR (Expr::create<Word>("List") + Expr::create<Word>("Sub") + unexpected_fail);
     681      RF_FUNC_ERROR (unexpected_fail);
    623682    }
    624683    uintptr_t _v_len__rest = (_v_len1 - _v_len2);
     
    631690          goto _block2__branch1;
    632691        }
    633         lsplit (_ve_list2, 0, _ve__e__e_tmp_m_Listrf_m_136_m_20, _v_lsplit__list2);
     692        lsplit (_ve_list2, 0, _ve__e__e_tmp_m_Listrf_m_148_m_20, _v_lsplit__list2);
    634693        for ( ; ; iter(_ve_list2)++)
    635694        {
     
    645704              goto _block2__branch1;
    646705            }
    647             uintptr_t _v_len___e__e_tmp_m_Listrf_m_136_m_27 = (_v_len3 - _v_len4);
     706            uintptr_t _v_len___e__e_tmp_m_Listrf_m_148_m_27 = (_v_len3 - _v_len4);
    648707            if (!_vt_erm.term_eq (_v_lsplit__list2, 0))
    649708            {
    650709              goto _continue1;
    651710            }
    652             Expr _ve__e__e_tmp_m_Listrf_m_136_m_27 (_v_lsplit__list2, 1, _v_len___e__e_tmp_m_Listrf_m_136_m_27);
     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);
    653712            _v_list1__1 = _ve_rest;
    654713            goto _exit1;
     
    684743    RF_ERROR (_c_4);
    685744  }
    686   if (_v_arg1.symbol_at (0))
    687   {
    688     RF_ERROR (_c_4);
    689   }
    690   Expr _v_deref__arg1 (_v_arg1, 0);
    691   uintptr_t _v_len1 = _v_deref__arg1.get_len ();
    692   uintptr_t _v_len2 = 0;
    693   if ((_v_len1 < _v_len2))
    694   {
    695     RF_ERROR (_c_4);
    696   }
    697   uintptr_t _v_len__stub1 = (_v_len1 - _v_len2);
    698   Expr _v_stub1 (_v_deref__arg1, 0, _v_len__stub1);
     745  Expr _v_stub1 (_v_arg1, 0, 1);
    699746  RF_TAILCALL (Deparen_m_Term, _v_stub1, _v_res1);
    700747RF_END
  • to-imperative/trunk/library/List/List.hh

    r1703 r1830  
    3434RF_DECL (Reverse);
    3535
     36RF_DECL (Intersperse);
     37
    3638RF_DECL (Nub);
    3739
  • to-imperative/trunk/library/List/refal/List.rf

    r1703 r1830  
    55$use Apply Access Arithm;
    66
    7 $func Deparen-Term (expr) = expr;
    8 Deparen-Term (expr) = expr;
     7$func Deparen-Term term = expr;
     8Deparen-Term {
     9  (expr) = expr;
     10  term   = term;
     11};
    912
    1013$func Paren-Term term = (term);
     
    7881};
    7982
     83Intersperse (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;
     91
    8092Nub e.expr =
    8193  e.expr () $iter {
  • to-imperative/trunk/library/List/refal/List.rfi

    r1703 r1830  
    2525$func Reverse e.list = e.rev-list;
    2626
     27$func Intersperse (e.sep) e.list = e.new-list;
     28
    2729$func Nub e.expr = e.selected;
    2830
  • to-imperative/trunk/library/include/refal-plus/List.rfi

    r1703 r1830  
    2525$func Reverse e.list = e.rev-list;
    2626
     27$func Intersperse (e.sep) e.list = e.new-list;
     28
    2729$func Nub e.expr = e.selected;
    2830
  • to-imperative/trunk/library/include/refal/List.hh

    r1703 r1830  
    3434RF_DECL (Reverse);
    3535
     36RF_DECL (Intersperse);
     37
    3638RF_DECL (Nub);
    3739
Note: See TracChangeset for help on using the changeset viewer.