Vorige Inhoud Volgende
_________________________________________________________________
LISP 860409 (c) 1986 by ORD-GROUP 40
LISP
Inleiding
LISP was een van de eerste programmeertalen die ontworpen werden.
De taal is door McCarthy in 1964 ontworpen als tegenhanger van
het toen nieuwe FORTRAN. LISP heeft twee typische eigenschappen,
namelijk 'functioneel programmeren' en het feit dat programma's
dezelfde vorm hebben als hun data.
Functioneel programmeren is een stijl van programmeren waarbij
uitsluitend functies worden gebruikt. Een programma bestaat dan
uit een aantal functiedefinities, en het enige wat een programma
'doet' is iets uitrekenen. Een programma dat de faculteit uitre-
kent ziet er bijvoorbeeld zo uit (in een fantasietaal):
fac(n)= IF n=0 THEN 1
ELSE n*fac(n-1)
Dit is een definitie van een functie. Waar in een imperatieve
(lees: gewone) programmeertaal een lus wordt gebruikt, treedt
hier recursie op. Dat is een van de basisprincipes van functio-
neel programmeren. Over het algemeen is een functioneel programma
korter en leesbaarder dan het imperatieve equivalent. In LISP is
dit effect iets minder sterk vanwege de syntax.
In LISP ziet het bovenstaande programma er bijvoorbeeld zo uit:
(EXPR FAC (LAMBDA (N) (COND
((EQUAL N 0) 1)
(T (TIMES N (FAC (PLUS N -1))))
)))
Opvallend is het aantal haakjes. Dat is dan ook een van de meest
genoemde nadelen van LISP.
Het is ook mogelijk in LISP op een BASIC-achtige manier met
assignments en sprongen te programmeren door middel van een
speciale functie PROG. Tegenwoordig wordt dat minder gebruikt.
De interpreter
De interpreter is erop gebouwd om op een relatief kleine computer
(zoals de ORDINATOR er een is) te werken. De meeste LISP inter-
preters werken op veel grotere computers, die veel sneller zijn
en meer geheugen tot hun beschikking hebben.
Deze interpreter kan programma's tot zo'n tien pagina's LISP code
gemakkelijk verwerken. Dit is bereikt door vele functies in
machinetaal te coderen, en door zorvuldig met het weinige geheu-
gen om te springen.
De LISP interpreter is globaal op te delen in de volgende delen:
- Het hoofdprogramma. Dit bevat de cyclus invoer-uitrekenen-
uitvoer, een routine om foutmeldingen af te drukken en
initialisatieroutines voor het opstarten en het terugkomen
na een foutmelding.
- De evaluator. Dit is een stelsel van routines die het
feitelijke rekenwerk verzorgen. De evaluator gebruikt de
_________________________________________________________________
Vorige Inhoud Volgende