I just renamed the subject line since my question has nothing inherently to 
do with heuristic search. (That was just my particular use case.) This kind 
of thing can happen in any codebase where destructuring of function 
arguments is used.

On Monday, January 26, 2015 at 12:16:04 PM UTC-5, David James wrote:
>
> Background: I'm implementing a heuristic search over a tree of 
> possibilities. The heuristic calculation runs over a map of state. I have a 
> large number of nested functions that support this heuristic. So, for 
> convenience, I often pass around `state` as the first argument in these 
> functions. Inside, I use the :keys destructuring style.
>
> Commentary: This approach is convenient; however, I feel like I've veered 
> towards one of the pitfalls of OO programming, where this "convenient" 
> composition of data hides the essence of the problem. In contrast, in other 
> projects, I've done lots of memoization -- this is easy when all arguments 
> are explicit.
>
> Questions: Have others faced this tradeoff? How do you think about it? How 
> do you strike a balance, if there is one? More pointedly, is there a way to 
> get the best of both worlds (e.g. the "composed" argument style AND 
> memoization)?
>
> Possible Solution: What about writing a macro to help? It would not be 
> hard to handle the memoization of some 'base-level' functions:
>
> (defn f1 [{:keys [a b] :as state}] :costly-calculation-of-a-b)
> (defn f2 [{:keys [b c] :as state}] :costly-calculation-of-b-c)
>
> However, when it comes to a chain of functions, the memoization is not 
> apparent:
>
> (defn f3 [{:keys [x] :as state}] (+ (f1 state) (f2 state) (g x)))
>
> In order to memoize `f3`, one would need to account for not only `x` but 
> also `a`, `b`, and `c`. This would be an improvement over memoizing the 
> entire state.
>
> Any thoughts on this kind of solution? Has it already been done? Are there 
> other, possibly better, ways to address this overall challenge?
>

-- 
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
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to