Related articles |
---|
Reuse of computations citron@CS.HUJI.AC.IL (1995-09-04) |
Re: Reuse of computations snovack@justright.ICS.UCI.EDU (Steven Novack) (1995-09-09) |
Re: Reuse of computations pardo@cs.washington.edu (1995-09-11) |
Re: Reuse of computations chase@centerline.com (1995-09-12) |
Re: Reuse of computations davids@ICSI.Berkeley.EDU (1995-09-18) |
Newsgroups: | comp.compilers |
From: | davids@ICSI.Berkeley.EDU (David Petrie Stoutamire) |
Keywords: | optimize |
Organization: | International Computer Science Institute, Berkeley, CA, U.S.A. |
References: | 95-09-053 95-09-100 |
Date: | Mon, 18 Sep 1995 23:38:36 GMT |
David Chase <chase@centerline.com> wrote:
>I also recall (don't know it was ever published) that someone once
>wrote a "memoizing functional" in Russell -- in theory, a sick person
>might be able to do this in C++ with a template (I am sorely tempted
>to try).
Here's one written in Sather:
class MEMOIZE{DOMAIN,RANGE} is
private attr h:FMAP{DOMAIN,RANGE};
private attr r:ROUT{DOMAIN}:RANGE;
-- memoize takes a bound routine and returns another bound
-- routine which stores every computed value in a map; these are
-- looked up and do not have to be recomputed in the future.
memoize(r:ROUT{DOMAIN}:RANGE):ROUT{DOMAIN}:RANGE is
help_ob::=new;
help_ob.h:=#FMAP{DOMAIN,RANGE};
help_ob.r:=r;
return #ROUT(helper(help_ob,_));
end;
private helper(ob:SAME,d:DOMAIN):RANGE is
if ob.h.test(d) then return ob.h.get(d);
else
res::=ob.r.call(d);
ob.h:=ob.h.insert(d,res);
return res;
end;
end;
end;
- Dave
--
Return to the
comp.compilers page.
Search the
comp.compilers archives again.