De Wortels van Lisp
Mei 2001
(Ik heb dit artikel geschreven om mezelf te helpen begrijpen wat McCarthy precies ontdekte. Je hoeft deze materie niet te kennen om Lisp te programmeren, maar het zou nuttig moeten zijn voor iedereen die de essentie van Lisp wil begrijpen — zowel in de zin van zijn oorsprong als zijn semantische kern. Het feit dat het zo'n kern heeft, is een van de onderscheidende kenmerken van Lisp, en de reden waarom Lisp, in tegenstelling tot andere talen, dialecten heeft.)
In 1960 publiceerde John McCarthy een opmerkelijk artikel waarin hij voor programmeren deed wat Euclides deed voor meetkunde. Hij liet zien hoe je, gegeven een handvol eenvoudige operatoren en een notatie voor functies, een hele programmeertaal kunt bouwen. Hij noemde deze taal Lisp, voor "List Processing", omdat een van zijn kernideeën was om een eenvoudige datastructuur, een lijst genaamd, te gebruiken voor zowel code als data.
Het is de moeite waard om te begrijpen wat McCarthy ontdekte, niet alleen als een mijlpaal in de geschiedenis van computers, maar als een model voor waar programmeren naartoe neigt te gaan in onze eigen tijd. Het lijkt mij dat er tot nu toe twee echt schone, consistente modellen van programmeren zijn geweest: het C-model en het Lisp-model. Deze twee lijken punten van hoog terrein, met moerassige laaglanden ertussen. Naarmate computers krachtiger zijn geworden, zijn de nieuwe talen die ontwikkeld zijn gestaag opgeschoven naar het Lisp-model. Een populair recept voor nieuwe programmeertalen in de afgelopen 20 jaar is om het C-model van computergebruik te nemen en er, stukje bij beetje, delen uit het Lisp-model aan toe te voegen, zoals runtime typing en garbage collection.
In dit artikel zal ik proberen in de meest eenvoudige bewoordingen uit te leggen wat McCarthy ontdekte. Het punt is niet alleen om te leren over een interessant theoretisch resultaat dat iemand veertig jaar geleden bedacht, maar om te laten zien waar talen naartoe gaan. Het ongebruikelijke aan Lisp — in feite de bepalende kwaliteit van Lisp — is dat het in zichzelf geschreven kan worden. Om te begrijpen wat McCarthy hiermee bedoelde, zullen we zijn stappen opnieuw doorlopen, met zijn wiskundige notatie vertaald naar werkende Common Lisp-code.