"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 [email protected] 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 <[email protected]> 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 [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
>>> ---
>>> 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 [email protected].
>>> 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 [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
> ---
> 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 [email protected].
> 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 [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
---
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 [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/clojure/0808d1be-b431-4925-80f6-7cf6eb2ad77f%40www.fastmail.com.