- Log ind eller Opret konto for at kommentere
- Anmeld denne kommentar
Dette svar falder velsagtens i kategorien ""Det forstår man ikke, før man har prøvet det", men hør mig til ende ;-)
Fordi LISP er et "programmerbart programmeringssprog" (kode er data, som kan manipuleres af kode), så kan man skrive programmer, som kan optimeres på virkeligt sjove (og værdifulde) måder.
Et klassisk eksempel er implementationen af en algoritme, der kan tegne en 3D-scene med et vilkårligt antal belysningkilder (en såkaldt raytracer). Den kan skrives i LISP på en sådan måde, at man kan skrive et andet LISP program, som indlæser det første program og spytter et nyt program ud, som er optimeret til eksempelvis to belysningskilder. Dette nye program vil altså være en specialiseret udgave af det generelle program, optimeret til et bestemt vinkling af input. Det sjove (og værdifulde) er da også, at det nye program vil være meget hurtigere.
Man kan altså skrive en generel implementation af en algoritme, og derefter spytte alle mulige varianter ud, som er specialiseret (og optimret) til særlige formål.
The bottom line: Det er lettere at skrive partielle evaluatorer i LISP end i noget andet sprog, og det kan -- for visse typer problemer -- øge en udviklers produktivitet med en faktor helt-vildt-meget.
Og, nej, selvom de færreste af os (inklusive undertegnede) nogensinde bliver stillet opgaver, hvor brugen af en partiel evaluator er lige til højrebenet, så bruger de fleste af os resultatet af partielle evaluatorer hver eneste dag: De fleste compilere har nemlig, på et eller andet tidspunkt i deres udviklingsforløb, været en tur igennem en partiel evaluator ... som oftest skrevet i en variant af LISP. Det viser sig nemlig, at en compiler er en partiel evaluering af en fortolker, og at det er meget nemmere at skrive en fortolker end en compiler.