6 ms·
Obvious objections - JS has no tail call elimination, no macros, and state-changing is managed with entirely different conventions in Scheme. Also the conceit o
by neilk 13y ago
Obvious objections - JS has no tail call elimination, no macros, and state-changing is managed with entirely different conventions in Scheme. Also the conceit of SICP (not really justified) is that they don't have to teach you syntax, because homoiconicity. Still, I think it's a worthy pursuit to try to bring the insights of this book to a wider audience.
Side note: the navigation is really irritating. The back button only works sometimes, because it's replacing content without doing some kind of pushState. So you have to hunt for links.
Another side note: Sean Burke and Piers Cawley have ported some of mjd's excellent book Higher-Order Perl to JavaScript. This might be even better, because both Perl and JS have C-like syntax hiding some impressive functional capabilities. I wish someone would finish that, but I guess few people even know about HOP, these days.
http://interglacial.com/hoj/hoj.html http://interglacial.com/hoj/hoj.html
http://www.bofh.org.uk/2010/11/18/higher-order-javascript http://www.bofh.org.uk/2010/11/18/higher-order-javascript
- deleted 13y ago[deleted]
- officialjunk 13y agotail call elimination can be implemented in javascript: http://raganwald.com/2013/03/28/trampolines-in-javascript.html http://raganwald.com/2013/03/28/trampolines-in-javascript.ht...
- jfb 13y agoTrampolines are a solution to the same problem that tail-call elimination solves; they're not transparent to the programmer.
- jessep 13y agoMacros in js: http://sweetjs.org/ http://sweetjs.org/ "Sweet.js brings the hygienic macros of languages like Scheme and Rust to JavaScript. Macros allow you to sweeten the syntax of JavaScript and craft the language you’ve always wanted."
- btilly 13y agoI know HOP. It depresses me how much of HOP is irrelevant in Python because they have proper iterators. And how few Perl programmers realize that these days the lack is a major omission in the language.
- Sukotto 13y agoI'm a longtime perl user, and I don't know where my blind spots are. Are there any particular resources you would recommend for someone like me to get going quickly with python? In particular ones that specifically address the type of blind spot you mention?
- btilly 13y agoThe Python tutorial teaches the language fairly well: http://docs.python.org/2/tutorial/ http://docs.python.org/2/tutorial/ The iterator section is http://docs.python.org/2/tutorial/classes.html#iterators http://docs.python.org/2/tutorial/classes.html#iterators. Here it is quickly. Suppose that an object has a __iter__ method which will return something with a next method that will, when it has exhausted the iterator, call StopIteration. Then all native looping constructs can loop over that object and it will just work. If you call a function that internally calls yield and nowhere calls return, then you get back a generator, which is an object with those methods. There is also syntax to construct such generators inline without even an explicit function. All of the closure based looping stuff in HOP which supports potentially infinite streams? It is all built in!
- gonnakillme 13y agos/call StopIteration/raise StopIteration/g
- StavrosK 13y agoI wrote a tutorial a while ago exactly for this purpose: http://www.stavros.io/tutorials/python/ http://www.stavros.io/tutorials/python/
- xiaoma 13y ago
- mistercow 13y ago>JS has no tail call elimination Apparently this is changing with ES6.
- zodiac 13y agoIt might be worth noting that this class (CS1101S in NUS) stops at chapter 3 of SICP. I took the previous scheme version of the class. Btw, I'm curious as to why the HOJ book didn't get taken down? I checked and the HOP book is not released under a license that allows for derivative works. I'm curious because I've made an interactive version of SICP (using scheme) and I can't find any other books to do this to because no one releases books under permissive enough licenses.
- 59nadir 13y ago> Also the conceit of SICP (not really justified) is that they don't have to teach you syntax, because homoiconicity. What syntax is there to teach?