Mercurial > repos > rhope
diff functional.rhope @ 88:f69987c58fa8
Merge
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Fri, 30 Jul 2010 19:52:54 -0400 |
parents | 6d41b71f1b77 |
children | e73a93fb5de1 |
line wrap: on
line diff
--- a/functional.rhope Fri Jul 30 01:48:59 2010 -0400 +++ b/functional.rhope Fri Jul 30 19:52:54 2010 -0400 @@ -21,3 +21,73 @@ } } +_Map[list,worker,cur:out] +{ + val <- [list]Index[cur] + nlist <- [list]Set[cur, [worker]Call[val, cur]] + + [nlist]Next[cur] + { + out <- _Map[nlist, worker, ~] + }{ + out <- Val[nlist] + } +} + +Map[list,worker:out] +{ + [list]First + { + out <- _Map[list,worker,~] + }{ + out <- list + } +} + +_Find[list,pred,cur:loc,not found] +{ + val <- [list]Index[cur] + If[[pred]Call[val]] + { + loc <- cur + }{ + ,not found <- [list]Next[cur] + { loc,not found <- _Find[list,pred,~] } + } +} + +Find[list,pred:loc,not found] +{ + ,not found <- [list]First + { + loc <- _Find[list,pred,~] + } +} + +_Filter[list,pred,cur,dest:out] +{ + val <- [list]Index[cur] + If[[pred]Call[val,cur]] + { + ndest <- [dest]Append[val] + }{ + ndest <- dest + } + [list]Next[cur] + { + out <- _Filter[list,pred,~,ndest] + }{ + out <- Val[ndest] + } +} + +Filter[list,pred:out] +{ + [list]First + { + out <- _Filter[list,pred,~, List[]] + }{ + out <- list + } +} +