David:

I see why you would want that.

If you want this soon, I would recommend using data.avl as suggested by Michał,
or copy the parts of the sorted-set/map implementation from Clojure and
implement it yourself.

If you don't want it soon, you could try persuading a few dozen people to
vote on CLJ-1008, and hope the Clojure developers also want this change.
No guarantees there.

Andy

On Thu, Feb 19, 2015 at 12:18 PM, David James <davidcja...@gmail.com> wrote:

> Andy, to take advantage of the Red-Black Tree, I'm looking for public API
> access to the branches. (I'm not looking for a work-around.)
>
> More discussion on this at SO:
> http://stackoverflow.com/questions/1981859/finding-keys-closest-to-a-given-value-for-clojure-sorted-maps
>
> Thanks to both Michał Marczyk and Andy for commenting on CLJ-1008 (
> http://dev.clojure.org/jira/browse/CLJ-1008).
>
> On Thursday, February 19, 2015 at 1:02:53 PM UTC-5, Andy Fingerhut wrote:
>>
>> I haven't checked carefully, but from at least a quick look it appears
>> that implementing the NavigableMap and NavigableSet interfaces could be
>> done by using the existing subseq and rsubseq functions in clojure.core?
>>
>> It doesn't give you access to subtree nodes directly, but perhaps it is
>> sufficient for your purposes?
>>
>> Andy
>>
>> On Wed, Feb 18, 2015 at 6:04 PM, David James <david...@gmail.com> wrote:
>>
>>> Summary: I'd like to find a public API to work with the underlying tree
>>> of a sorted-map.
>>>
>>> For example:
>>>
>>> (def t (sorted-map 1 :a 2 :b 3 :c 4 :d 5 :e 6 :f))
>>>
>>> The underlying implementation of sorted-map uses a PersistentTreeMap,
>>> which can be accessed with `tree`:
>>>
>>> (.tree t) ;=> [2 :b]
>>>
>>> I have not found a way to access the left and right branches, since
>>> calling `left` fails:
>>>
>>> (.left (.tree t))
>>>
>>> IllegalArgumentException Can't call public method of non-public class:
>>> public clojure.lang.PersistentTreeMap$Node clojure.lang.
>>> PersistentTreeMap$BlackBranch.left()  
>>> clojure.lang.Reflector.invokeMatchingMethod
>>> (Reflector.java:88)
>>>
>>> Perhaps it would be reasonable to make such calls possible, at least
>>> from the Java API (without reflection)?
>>>
>>> CLJ-1008 (http://dev.clojure.org/jira/browse/CLJ-1008) offers one
>>> possible way to support a public API. It was created in 2012. Perhaps it
>>> could use another look. Thoughts?
>>>
>>>  --
>>> You received this message because you are subscribed to the Google
>>> Groups "Clojure" group.
>>> To post to this group, send email to clo...@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+u...@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+u...@googlegroups.com.
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>
>>  --
> 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.
>

-- 
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