5 ms·
I implemented a compile-time test framework in Gambit Scheme in 7 lines of code, and Python's yield in about 20 or so. http://billsix.github.io/bug.html#_make_
by billsix 8y ago
I implemented a compile-time test framework in Gambit Scheme in 7 lines of code, and Python's yield in about 20 or so.
http://billsix.github.io/bug.html#_make_generator http://billsix.github.io/bug.html#_make_generator
Lisp code has few wasted moves. Programming in it does require changing your mindset of syntactic beauty. And once your mindset changes, you can make whatever syntax you want.
Perhaps the biggest hurdle is that the code is not best read linearly. The reader must understand the order of evaluation, which follows very simple rules, in order to understand the code correctly. That hurdle is definitely worth the jump.
- Koshkin 8y ago> whatever syntax you want “... any color as long as it’s black.”
- billsix 8y agoYou neglected to quote the full sentence, which wasn’t even long. To change your mindset, read: http://www.paulgraham.com/onlisp.html http://www.paulgraham.com/onlisp.html Or instead, how bout this. show me your implementation of generators in the “user space” of your language of choice. Show me your compile-time test framework. Both of these are relevant to the article, what C++ may provide to users in 2 years. But I did these on my own, without requiring Marc Feeley’s approval nor his implementation (he is the creator of Gambit)
- Ace17 8y ago> Perhaps the biggest hurdle is that the code is not best read linearly. The reader must understand the order of evaluation, which follows very simple rules, in order to understand the code correctly. Could you please give some details about how the order of evaluation differs from, say, C? Thanks!
- billsix 8y agoThey are very similar. They are both applicative-order, meaning that the arguments to a procedure are evaluated before the procedure is applied. The evaluation of a lambda results in a function value, which captures the enclosing scope, but the procedure is not yet applied to anything. But the main difference that I've seen anecdotally is that imperative programmers as a whole tend to get confused by nested expressions, or lets just say they prefer sequential statements over nested expressions. My assumption is that they don't fully understand the order of evaluation in their language of choice.
- kazinator 8y agoScheme and C evaluation rules are very similar: in both languages, the order of evaluation of function arguments is unspecified. Common Lisp is left to right, so that (list (inc i) (inc i) (inc i)) will reliably produce (1 2 3) if i starts at zero.