The get-in that ataggart suggested is probably what you want but destructuring can also be used here.
(def nested-ds ["foo", {:hi "there" :hello ["buddy"]}, "hi"]) (let [[foo {there :hi [buddy] :hello} hi] nested-ds] (print foo there buddy hi)) On Jul 21, 6:31 am, Moses <mosesam...@gmail.com> 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? --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---