Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

If I understand what you mean by "immutable by default", then it's all Scheme implementations, and probably all Lisp as well.


Common Lisp variables are not even a little bit immutable by default. setf is the opposite of immutable values, you can mutate any place in a way that's visible everywhere regardless of any sort of scoping.

Immutable by default might be what you'd get if CL only had let to introduce/"change" variables.


Scheme is always mutable, all the time, it just has separate functions for defining and mutating a variable.


What about set-car! set-cdr! vector-set! string-set!


If you can't easily avoid those, you're not going to be capable of doing much else anyway.


I was responding to "If I understand what you mean by "immutable by default", then it's all Scheme implementations"; not whether one should or should not use mutating operations!


So what does "immutable by default" mean??? Is there even an agreed upon definition? Because you certainly didn't explain / explain clearly if that's what you were attempting to do... Clojure has mutable vars and set!, so it seems Scheme is no worse and fits that guy's definition of IbD.


Consider:

  (define x (vector 1 2 3 4))
  (define y x)
  (vector-set! x 0 100)
Should y[0] be 100 or 1?


That's not really relevant. According to the guy's own definition, Scheme is as immutable as Clojure, which is what he was specifically asking. They both have something like set!. If you want to wank off about Scheme not being 100% immutable, go right ahead, but it's clearly not what was being discussed.


They are discouraged by convention.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: