Don't get be wrong: Clojure can manipulate lists easily. You can append items to a list with (concat xs '(5)) or use syntax quoting `(~@xs 5). You just can't use conj specifically, as that function has a particular use case.
The problem with manipulating code is that code is complex. The same functionality can be written in many different ways, and it's hard to account for every possibility, so any abstraction that treats code as data tends to be either be leaky or very simple (or occasionally, very complex). Clojure *can* treat code as data, but it's one of those tools that has a narrow use case. Clojure's philosophy more revolves around *replacing* code with pure data, where possible. Reading is safer and more predictable than evaluating, and evaluating within narrow constraints is often better than reaching for the more general purpose eval. On Mon, 19 Jul 2021, at 2:00 PM, SideStep wrote: > Thanks James, will for something like it I think. Still, would be nice if > code was manipulatable with ease - clojure style. Code-is-data such a > powerful idea. > > On Sunday, July 18, 2021 at 7:43:20 PM UTC+2 James Reeves wrote: >> __ >> "Code is data" comes up in Clojure less than newcomers might expect. As a >> rule of thumb, it should be the last tool you reach for, as it's easier to >> work with data structures that have a simpler and more constrained syntax. >> >> It's often hard to give good advice when context is lacking, but if you have >> a grid, and want to supply a sequence of instructions to modify it, and you >> want to inspect and manipulate those instructions, then I'd suggest >> something like: >> >> (transform >> (grid 10 10) >> [[:toggle 2 3 4 5] >> [:off 2 3 4 5] >> [:on 2 3 4 5]]) >> >> On Sun, 18 Jul 2021, at 5:40 PM, SideStep wrote: >>> Thanks Tania! The point I'm making is that list (data structure for >>> evaluatable data/code) is not easily manipulatable with code in clojure. So >>> much for 'code-is-data'... >>> Thanks for the suggestion. >>> In regards to rethinking it: it is supposed to be commands coming-in that >>> sets parts of the grid with on/off/toggle... I want to append those >>> commands (code) as data to the representation of a grid and evaluate the >>> list of commands to get the final state of the grid. >>> Trying to embrace this code-is-data thing here. >>> On Saturday, July 17, 2021 at 9:21:29 PM UTC+2 tanya.m...@gmail.com wrote: >>>> >>>> Hi, >>>> >>>> conj <https://clojuredocs.org/clojure.core/conj> adds at the end of a >>>> vector, but at the beginning of a list. It is how it is implemented. I >>>> think this >>>> <https://stackoverflow.com/questions/5734435/put-an-element-to-the-tail-of-a-collection> >>>> and this >>>> <https://medium.com/@greg_63957/conj-cons-concat-oh-my-1398a2981eab> sums >>>> it up why. >>>> >>>> You could achieve what you want by using concat >>>> <https://clojuredocs.org/clojure.core/concat> (note this returns a >>>> LazySeq): >>>> `user=> (concat grid '((off 1 2 3 6))) >>>> (-> (grid 10 10) (toggle 2 3 4 5) (off 2 3 4 5) (on 2 3 4 5) (off 1 2 3 >>>> 6))` >>>> Though I'm not exactly sure what is the end goal of this but I'd rethink >>>> the way it is done. >>>> >>>> >>>> >>>> >>>> On Sat, 17 Jul 2021 at 14:24, SideStep <nesvarb...@gmail.com> wrote: >>>>> >>>>> ____ <https://stackoverflow.com/posts/68420449/timeline> >>>>> >>>>> I have a representation of a matrix in grid.clj file: >>>>> >>>>> `(-> (grid 10 10) >>>>> (toggle 2 3 4 5) >>>>> (off 2 3 4 5) >>>>> (on 2 3 4 5)) ` >>>>> >>>>> >>>>> It's a list of functionts, first one initializes a grid, others modify it. >>>>> Clojures' 'code is data' supposed to make it easy for me to modify that >>>>> representation by adding an instrucion at the *end* of collection. List >>>>> is an ordered collection right? Order matters. How do I add an >>>>> instruction to the end of the list then? >>>>> Something like this: >>>>> >>>>> >>>>> `(def grid (read-string (slurp "grid.clj"))) >>>>> (conj grid '(off 1 2 3 6)) ` >>>>> Yet I can't add to the end of the list, which is a data structure that is >>>>> evaluatable as code. How is it 'code as data' if I can't add to the end >>>>> of the ordered collection that is meant for code (as data)? >>>>> >>>>> >>>>> >>>>> -- >>>>> 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. >>>>> To view this discussion on the web visit >>>>> https://groups.google.com/d/msgid/clojure/efd72013-a85e-46e8-b9db-10dde1a8a235n%40googlegroups.com >>>>> >>>>> <https://groups.google.com/d/msgid/clojure/efd72013-a85e-46e8-b9db-10dde1a8a235n%40googlegroups.com?utm_medium=email&utm_source=footer>. >>> >>> >>> -- >>> 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. >>> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/clojure/6cf09a4d-aedd-42e4-860c-35efcb68ed50n%40googlegroups.com >>> >>> <https://groups.google.com/d/msgid/clojure/6cf09a4d-aedd-42e4-860c-35efcb68ed50n%40googlegroups.com?utm_medium=email&utm_source=footer>. >> >> -- >> James Reeves >> booleanknot.com >> >> > > > -- > 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. > To view this discussion on the web visit > https://groups.google.com/d/msgid/clojure/ed22c0d1-cc25-4127-b9ae-2f0733ee874bn%40googlegroups.com > > <https://groups.google.com/d/msgid/clojure/ed22c0d1-cc25-4127-b9ae-2f0733ee874bn%40googlegroups.com?utm_medium=email&utm_source=footer>. -- James Reeves booleanknot.com -- 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. To view this discussion on the web visit https://groups.google.com/d/msgid/clojure/cbcd3e15-ee06-4f85-88b6-08b24fdd742d%40www.fastmail.com.