Spring til indhold

Lisp

Fra Wikipedia, den frie encyklopædi

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

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.

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

[redigér | rediger kildetekst]

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

[redigér | rediger kildetekst]

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

[redigér | rediger kildetekst]

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

[redigér | rediger kildetekst]

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.