[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
What's so cool about Scheme?
Correct my naivete if I am missing the big picture, but to me the coolest things about Scheme and LISP-like languages seem to be:
1. Code = data (including the necessary lambda for getting a handle on environments to create closure 'data' objects)
2. A 'graph engine': CONS cells are like Turing-complete data structures: you can build any imaginable data structure without explicitly using pointers or managing memory
Tail recursion is cool but that is a real-world optimization, no? On an abstract machine you never run out of stack space (if we are talking purely from an abstract language design perspective -- i.e., ease of programming from a human point of view).
I think these two features enable or greatly simplify metaprogramming: higher-order functions, code manipulating code for the purposes of implementing macros and so on.
What, specifically, do you need beyond these features to enable a 'functional paradigm'? Do you even need these features in a language to adhere to a functional paradigm?
The point of all this is the question: Is Scheme really a 'functional programming language' or is it just a really general purpose tool that allows functional programming? Instead, does this set of features that lends generality to Scheme constitute a cool idea but one with no good name, so the label 'functional' is misapplied? Would Scheme, LISP and their relatives be better categorized as 'orthogonal graph machines' or some such?