Lisp

Lisp, eller LISP (forkortelse for LISt Processing) er et dynamisk typet, funktionsorienteret programmeringssprog.

Oprindelse

Sproget er baseret på en matematisk teori – Alonzo Church's lambdakalkyle ( lambda calculus) fra 1936. Det blev specificeret af John McCarthy i 1958. Beskrivelsen blev publiceret i 1960 og sproget blev for første gang implementeret af Steve Russell i 1961. Dermed er LISP et af de ældste højniveau-programmeringssprog; blandt de nulevende og stadigvæk mest udbredte er det kun Fortran der er ældre.

Anvendelse

Lisp har væsentlig betydning inden for kunstig intelligens og er velegnet til metaprogrammering – sidstnævnte ikke mindst i kraft af et af Lisps kendemærker: programmer og data har samme repræsentation; derved er det naturligt at lade programmer generere og transformere andre programmer.

Program- og datarepræsentation

Både data og programmer repræsenteres i Lisp i form af lister. En liste består af en samling elementer, som hver især enten kan være et atom – en simpel værdi eller et symbol – eller en liste. En liste er altså en rekursiv størrelse. Derfor er det naturligt også at definere funktioner rekursivt ved at definere behandlingen af listens hoved, som er det første element, så af dens hale, som udgøres af resten af listen. Halen består så af et hoved og en hale, osv.; i grænsetilfaldet er halen tom, hvilket normalt bruges som stopkriteriet for rekursionen. Operationerne til at plukke hovedet hhvs. halen af en liste er blandt de grundlæggende operationer i LISP.

LISPs lister kan bruges til at repræsentere andre abstrakte datastrukturer. Fx kan et træ repræsenteres af en liste af lister.

I den oprindelige LISP eksisterer arbejdslagerbegrebet ikke, dvs. man opererer ikke med variabler, og funktionskald kan derfor ikke have bivirkninger; en funktion definerer en ren transformation af input, som er en parameterliste, til en outputværdi, som også er en liste.

Moderne udvidelser

Moderne LISP-dialekter tillader et vist mål af bivirkninger, fx i forbindelse med udskrivning, filoperationer og operativsystemkald. Nogle af dialekterne understøtter også andre programmeringsparadigmer end det funktionsorienterede – fx det objektorienterede.

Kontekstbaserede funktionskald

Når en LISP-funktion kaldes vil den ofte få en parameter med der indeholder oplysninger om den kontekst hvori kaldet fandt sted; dvs. virkningen af udførelsen af funktionskaldet kan afhænge meget af kaldets kontekst, ligesom et ords betydning (semantik) i et almindeligt, eller naturligt sprog ofte afhænger af i hvilken sætning (eller, generelt, sammenhæng) det nævnes.

Denne egenskab kaldes også closure.

LISP-dialekter

Blandt de mest udbredte og mere moderne Lisp-dialekter er:

Også Logo, det gamle børnevendte sprog som mest forbindes med skildpaddegrafik, dvs. med at tegne figurer på skærmen vha. en lille virtuel skildpadde, er en Lisp-dialekt.

Se også