[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?