Show
Ignore:
Timestamp:
05/15/06 21:26:00 (3 years ago)
Author:
gaal
Message:

r10423@sike: roo | 2006-05-15 21:52:25 +0300

  • parse and honor [\] metaoperator
  • produce builtin
  • update tests
Files:
1 modified

Legend:

Unmodified
Added
Removed
  • src/Pugs/Prim/List.hs

    r10315 r10356  
    156156            if cond then return . VBool $ cond else elemByM eq y xs 
    157157 
    158 op2ReduceL :: Val -> Val -> Eval Val 
    159 op2ReduceL sub@(VCode _) list = op2ReduceL list sub 
    160 op2ReduceL list sub = do 
     158op2ReduceL :: Bool -> Val -> Val -> Eval Val 
     159op2ReduceL keep sub@(VCode _) list = op2ReduceL keep list sub 
     160op2ReduceL keep list sub = do 
    161161    code <- fromVal sub 
    162     op2Reduce list $ VCode code{ subAssoc = "left" } 
    163  
    164 op2Reduce :: Val -> Val -> Eval Val 
    165 op2Reduce sub@(VCode _) list = op2Reduce list sub 
    166 op2Reduce list sub = do 
     162    op2Reduce keep list $ VCode code{ subAssoc = "left" } 
     163 
     164op2Reduce :: Bool -> Val -> Val -> Eval Val 
     165op2Reduce keep sub@(VCode _) list = op2Reduce keep list sub 
     166op2Reduce keep list sub = do 
    167167    code <- fromVal sub 
    168168    args <- fromVal list 
    169169    -- cxt  <- asks envContext 
    170     let (reduceM, reduceMn) = (foldM, foldMn) -- getReduceFuncs cxt 
     170    let (reduceM, reduceMn) = if keep then (scanM, scanMn) else (foldM, foldMn) 
    171171    let arity = length $ subParams code 
    172172    if arity < 2 then fail "Cannot reduce() using a unary or nullary function." else do 
     
    215215            rest <- fromVal =<< scanM f fqx xs 
    216216            return $ VList (q:rest) 
    217     getReduceFuncs cxt = case cxt of 
    218         CxtSlurpy _ -> (scanM, scanMn) 
    219         _           -> (foldM, foldMn) 
    220217 
    221218op2Grep :: Val -> Val -> Eval Val