On Mon, Jul 20, 2009 at 4:31 PM, Moses <[email protected]> wrote:

>
>  I come primarily from a perl programming background, but am trying
> to learn Clojure.
>
>  I'm looking for a clojure equivalent to the following.
>
>  Perl:
>
>   my $nestedDS = [ "foo", { hi => there, hello => ["buddy"] }, "hi"]
>
>   my $foo = $nestedDS->[0];
>   my $there = $nestedDS->[1]->{hi};
>   my $hello = $nestedDS->[1]->{hello};
>   my $hi = $nestedDS->[2];
>
>   print "$foo $there $buddy $hi";
>
>   I'm not sure if it exists or not, but hopefully if it doesn't it
> can be created with a macro.
>
>   To clarify, I'm looking for a function/macro that makes use of a
> small DSL for accessing fields within the basic Clojure data
> structures.
>
>   The best I can come up with in Clojure for a DS equivalent to the
> above is:
>
>  (let [nestedDS ["foo", {"hi" "there", "hello", ["buddy"]}, "hi"]
>       foo (nth nestedDS 0)
>       there (get (nth nestedDS 1) "hi")
>       buddy (first (get (nth nestedDS 1) "hello"))
>       hi (nth nestedDS 2)]
>    (print foo there buddy hi)
>   )
>
>  Its not that much longer, but if the fields were more deeply nested,
> it would become a bit pretty annoying.
>
>  Does any kind of DS access macro exist? If not, how hard do you
> think it would be to write?
>
>  Something like
>
>    buddy (get-it nestedDS "[1]-{hello}-[0]")
>
>  Or perhaps an even shorter syntax is possible?


Perhaps use nested maps, along with get-in, assoc-in, update-in etc.:

let [nestedDS {:foo "foo" :greet-map {"hi" "there" "hello" ["buddy"]} :hi
"hi"}]

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

Reply via email to