Scheme is a general-purpose, functional programming language that was developed in the 1970s. It is a dialect of [[Lisp]] and is often used for educational purposes due to its simplicity and elegance. Scheme follows a minimalist design philosophy, focusing on minimal syntax and a small set of fundamental features.
One key feature of Scheme is its support for first-class procedures, allowing functions to be treated as data. This enables powerful programming techniques such as higher-order functions and closures. Scheme also supports lexical scoping, which means that variables are bound to the nearest enclosing scope where they are defined.
Another important aspect of Scheme is its emphasis on recursion as the primary control structure. Looping constructs like while or for are not built-in, but can be implemented using recursion. This recursive approach leads to elegant and concise code in many cases.
Scheme also has a powerful macro system, allowing users to define their own language constructs and extend the language itself. Macros enable [[Metaprogramming]], where programs can generate or modify other programs during runtime.
The simplicity and elegance of Scheme make it an ideal language for learning programming concepts and functional programming paradigms. It has been widely used in academia for teaching computer science courses. Additionally, Scheme serves as the basis for several other languages such as Racket and Clojure.
## Who invented Scheme?
Scheme was invented by Gerald Jay Sussman and Guy L. Steele Jr. at the Massachusetts Institute of Technology ([[MIT]]) in the 1970s.
# Conclusion
Despite its popularity in education, Scheme has not gained widespread adoption in industry due to its minimalistic nature and lack of certain features commonly found in other languages. However, its influence can be seen in many modern programming languages that have adopted functional programming concepts inspired by Scheme.
# References
```dataview
Table title as Title, authors as Authors
where contains(subject, "Scheme")
```