Re:Lisp and the Web: Creating Web Apps Through Lisp and GCE
by dreamcompiler on Friday April 16, 2021 @06:28PM
(#26839757)
Destructive modification of literal objects is one of those things you're not supposed to do because the consequences are undefined [0]. Some CL implementations might let you get away with it; others might not. I agree that it would be better if immutability was required for literals.
[0] http://www.lispworks.com/documentation/HyperSpec/Body/03_aba...
Re:Lisp and the Web: Creating Web Apps Through Lisp and GCE
by blacktriangle on Saturday April 17, 2021 @09:34AM
(#26844151)
Nice link. I'd be happy if an implementation just turned that into a compiler error. I can see use cases for reaching in and mutating like that, but also seems like dynamic scope is a better solution for when you want that kind of action at a distance.
Re:Lisp and the Web: Creating Web Apps Through Lisp and GCE
by kagevf on Friday April 16, 2021 @04:18PM
(#26838599)
I remember that ... it was pretty surprising!
I thought I could do (string "a string") to prevent it, but that didn't work.
(concatenate 'string "a string") worked, though ...
You have a function (defun my-val () "a string")
Referentially transparent, easy to reason about right? Wrong. Lisp strings are mutable, and everything is a reference. So if you do something like this
(replace (my-val) "b" :start1 0 :end1 1)
(my-val) => "b string"
I appreciate that CL doesn't force everything to be immutable, but it seems like at least strings would benefit from being treated as immutable values.