Scheme | ||||
---|---|---|---|---|
Paradigma | Functioneel | |||
Verschenen | jaren 70 | |||
Ontworpen door | Guy Steele, Gerald Jay Sussman | |||
Huidige versie | R7RS-small[1] | |||
Typesysteem | dynamisch, sterk | |||
Implementaties | PLT Scheme, MIT/GNU Scheme en anderen | |||
Dialecten | T [1] | |||
Beïnvloed door | Lisp, Algol | |||
Invloed op | Common Lisp, JavaScript, Ruby, Dylan, Lua, Clojure | |||
Bestandsextensies | .scm, .ss | |||
Website | http://plt-scheme.org/ | |||
|
Scheme is een functionele programmeertaal. Het is een dialect van de programmeertaal Lisp. Guy L. Steele en Gerald Jay Sussman ontwikkelden het in de jaren zeventig en presenteerden het aan de academische wereld in de zogenaamde Lambda Papers. De taal is gebaseerd op de lambdacalculus. De taal heette oorspronkelijk 'Schemer', in de traditie van talen als Planner en Conniver, maar werd ingekort door de beperkingen van het ITS-besturingssysteem dat geen bestandsnamen toeliet van meer dan 6 tekens.
De filosofie achter Scheme is minimalisme. Het doel is niet om uitbreiding op uitbreiding te stapelen, maar om zwakheden en beperkingen te verwijderen die uitbreidingen nodig schijnen te maken. Daarom heeft Scheme zo min mogelijk primitieven waarmee de rest geïmplementeerd kan worden. Het belangrijkste mechanisme voor control flow is staartrecursie.
Scheme was de eerste variant van Lisp die uitsluitend lexicaal variabelenbereik (in tegenstelling tot dynamisch variabelenbereik) gebruikte. Net zoals Lisp, gebruikt Scheme garbage collection om geheugenplaatsen met ongebruikte data te hergebruiken. De taal gebruikt lijsten als belangrijke datastructuur, maar kent daarnaast vele andere. Door het minimalisme van de Scheme-specificatie bestaat er geen standaardsyntaxis voor het maken van structuren met benoemde velden, of ondersteuning voor object-georiënteerd programmeren, maar bijna elke implementatie ondersteunt deze uitbreidingen.
Kenmerkend aan Scheme is dat het gebruikmaakt van prefixnotatie van bewerkingen in plaats van het meestgebruikte infix. Bijvoorbeeld 3+5 is een infixnotatie voor de optelling (de operator + bevindt zich tussen de 3 en de 5) terwijl + 3 5 de prefixnotatie is waarbij de operator (+) zich voor de twee operanden bevindt (3 en 5).