One of the neat things about Clojure (maybe all functional languages) is that functions can be defined either extensionally or intensionally. How can one create a Clojure structure that mixes these two types of definition?

That is, I would like to define a function f that saves its result the first time it is called against any particular argument so that if and when f is later called against the same argument, it does a look-up via a hash map rather than repeating a possibly expensive computation. I think I see how to do this with a ref to a mutable map (where, given an argument k, f would first try to find (f k) in the map but, if k is not currently a key of the map, the function would compute the value v = (f k) and then, in addition to returning v, add the entry <k v> to the map as a side effect. But this seems ugly. Is there some way to do what I want here without making explicit use of refs?

Lazy-seqs don't give me what I want because the arguments to be given to f don't occur in any kind of predictable sequence.

  --Larry

--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to