>>120
From today, start programming in BASIC, not even Visual Basic, just BASIC. It is Turing-complete, it's just a tool,
I never said anything about touring-completeness. I did however specifically worded my statement as
"to write a program that has certain form and does certain things. I say that having closures allows you to do anything you can do with macros, in a more or less similar fashion".
how does I branched without something to branch with now
Obviously, when you are rolling out your own
if, you roll out your own :t, :f, and comparison operators. Or you can demand the existence of a much simpler construct, like in FORTH
if is implemented in terms of conditional jump basically.
The important thing is that you have to perform O(1) work, so to speak, to do that once, and then use it with almost no cruft through the rest of your code. You can't do that in BASIC.
Because Lisp programs are lists, C++ programs are not strings. '(1 2 3) is a shorthand for (quote (1 2 3)).
Why does that matter? You keep pointing out some differences that I honestly consider superficial, without even trying to explain why these are important. Yes, when I write
return eval('lambda x: {}'.format(n))
simple string substitution happens instead of symbol substitution in AST. Why the fuck should I care? It's the "how", the result is the same.
If you want to deal with dynamic code generation/modification in a more safe manner, no problem, the compiler is there, the decompiler is there, the sky is the limit. Here, look at the Python goto module:
http://entrian.com/goto/download.html
Here, take a look of what we call ``in Lisp DSL''
MY EYES.
I value my sanity too much.
If I got the idea right, it's a variation on Ocaml pipes (though with some crazy shit that I'm afraid of).
Go look at LINQ syntax, then at the code it's translated into by the compiler.
Sure, it's nice to have a nice list comprehension syntax. It could be even nicer to be able to implement one yourself. However it only saves you a couple of characters per term when compared to raw combinator chaining.
from x in lst where x > 0 select x * 2
is nice, but not that much nicer than
lst.Where(x => x > 0).Select(x => x * 2)
.
There are much more interesting and difficult problems in programming than applying minor changes to syntax. If you boast of the ability to apply minor changes to syntax as if it was an intellectually liberating mind opener, then, uh, yo'ure either inexperienced or retarded.