5 ms·
Can I read SICP while learning Clojure? Is lisp very different?
by coold 6y ago
Can I read SICP while learning Clojure? Is lisp very different?
- palerdot 6y ago> Can I read SICP while learning Clojure? Is lisp very different? Clojure is Lisp!!! with some nice out of the box semantics like immutability.
- toby 6y agoThere are a few people who have translated the solutions to Clojure, this one looks like the most comprehensive: http://www.sicpdistilled.com/ http://www.sicpdistilled.com/
- WillPostForFood 6y agoIt looks like only chapter 1 is completed. A lot of chapter 2, and the just bits of 3 and 4.
- db48x 6y agoI wouldn't, unless you already know Scheme well. Otherwise, you're essentially learning two programming languages at once, and you won't know if your mistakes are because you misunderstand Scheme, Clojure, or both.
- zelphirkalt 6y agoNot sure Clojure can do all the recursion stuff (TCO), which would be good to have in a language, when working through SICP exercises. I would not recommend it for SICP. Better start with a Scheme, to have the least amount of friction.
- fulafel 6y agoYou can trivially use recur for self-recursion: call (recur x) instead of (my-fn x) inside your function. (There's also trampoline for mutual recursion cases)
- zelphirkalt 6y agoIs trampolining automatic, or does it have its own syntax as well? Even a little thing like (recur ...) could be a tiny amount of friction. But good to read, that the usual cases are apparently handled well in the language.
- fulafel 6y agoThe builtin helper function is called trampoline, it's a higher order function that relies on the mutually recursive functions returning "trampolines" or closures that do the desired subsequent call. The trampoline pattern is an old trick that can also be imlemented in other languages to avoid stack consumption in mutually recursive calls.
- zelphirkalt 6y agoI know what trampolining does, thank you. That's unfortunate, that it is an additional function call, which needs to be explicitly written out. I'd guess such is necessary ultimately, because of limitations of the JVM and its limitations regarding recursion.