4 ms·
Very cool! By purely functional I'm guessing they mean immutable by default? Aside from Clojure, what other Scheme/Lisp implementations are immutable by default
by rubiquity 10y ago
Very cool! By purely functional I'm guessing they mean immutable by default? Aside from Clojure, what other Scheme/Lisp implementations are immutable by default? I know Lisp-flavoured Erlang is due to being on the BEAM but I'm curious what else is out there.
- sparkie 10y agoI'm looking through the tests, and there's side effects everywhere. I'm confused as to what the author implies by "purely functional", so it would be nice to have some additional information.
- kr7 10y agoThere are definitely I/O side effects, but it looks like functions for mutating data structures (like set-cdr!) are intentionally unimplemented: https://github.com/aoh/owl-lisp/blob/master/scheme/base.scm#L393 https://github.com/aoh/owl-lisp/blob/master/scheme/base.scm#... That must be what they mean by "purely functional".
- qwertyuiop924 10y ago....soo, it's racket, but without all the shiny libraries and mcons. It sounded like it was going to be general-purpose DSSSL. That would have been so much more cool.
- 35bge57dtjku 10y agoIf I understand what you mean by "immutable by default", then it's all Scheme implementations, and probably all Lisp as well.
- nialo 10y agoCommon 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.
- bakul 10y agoWhat about set-car! set-cdr! vector-set! string-set!
- dleslie 10y agoThey are discouraged by convention.
- 35bge57dtjku 10y agoIf you can't easily avoid those, you're not going to be capable of doing much else anyway.
- bakul 10y agoI 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!
- 35bge57dtjku 10y agoSo 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.
- bakul 10y agoConsider: (define x (vector 1 2 3 4)) (define y x) (vector-set! x 0 100) Should y[0] be 100 or 1?
- 35bge57dtjku 10y agoThat'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.
- qwertyuiop924 10y agoScheme is always mutable, all the time, it just has separate functions for defining and mutating a variable.
- charlesetc 10y agoPurely functional doesn't mean immutable by default - it means immutable, period. A function called with the same arguments will always have the same result.
- amalcon 10y agoScheme is immutable to at least the same degree as Clojure (which is to say, there are mutable values, but their use is discouraged by convention).