Mercurial > repos > rhope
changeset 84:6d41b71f1b77
Add Map, Filter and Find
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Fri, 30 Jul 2010 23:48:31 +0000 |
parents | 27bb051d631c |
children | 6d10b5b9ebc3 |
files | functional.rhope |
diffstat | 1 files changed, 70 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/functional.rhope Tue Jul 27 23:33:31 2010 -0400 +++ b/functional.rhope Fri Jul 30 23:48:31 2010 +0000 @@ -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 + } +} +