Lisp: Forskelle mellem versioner
Content deleted Content added
m Tilføjet links |
m Rettet flere links efter at have lært hvordan det gøres rigtigt |
||
Linje 1:
'''Lisp''', eller '''LISP''' (forkortelse for LISt Processing) er et [[dynamisk typet]], [[funktionsorienteret]] [[programmeringssprog]].
==Oprindelse==
Sproget er baseret på en matematisk teori - [[Alonzo Church]]'s [[lambda calculus]] fra 1936. Det blev opfundet 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. ▼
▲Sproget er baseret på en matematisk teori - [[Alonzo Church]]'s [[lambdakalkyle]] ([http://en.wikipedia.org/wiki/Lambda_calculus| lambda calculus]
LISP har væsentlig betydning inden for [[kunstig intelligens]] og er velegnet til [[metaprogrammering]], sidstnævnte ikke mindst i kraft af et Lisps kendemærker: programmer og data har grundlæggende samme repræsentation; derved er det naturligt at lade programmer generere og transformere andre programmer. ▼
==Anvendelse==
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 defineres [[funktion]]er tit også rekursivt: man splitter en liste op i et hoved, som er det første element, og en hale, som udgøres af resten af listen. Halen består så af et hoved og en hale, osv.; i et grænsetilfalde er halen tom. 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. ▼
==Program- og datarepræsentation==
I den oprindelige LISP eksisterer [arbejdslager]begrebet ikke, dvs. man opererer ikke med [variabler], og [[funktionskald]] har ingen [[bivirkninger]]; en funktion definerer en ren [transformation] af [[input]], som er en [[parameter]]liste, til en [[output]]værdi, som også er en liste.▼
▲Både data og programmer repræsenteres i
Moderne [[LISP-dialekter]] tillader et vist mål af bivirkninger. Nogle af dialekterne indfører også andre [[programmeringsparadigme]]r end det funktionsorienterede - fx det [[objektorienterede]].▼
▲LISPs lister kan bruges til at repræsentere andre [[abstrakte datastrukturer]]. Fx kan et [[træ]] repræsenteres af en liste af lister.
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 naturligt - dvs. almindeligt - sprog ofte afhænger af i hvilken sætning (eller, generelt, sammenhæng/kontekst) det nævnes. ▼
▲I den oprindelige LISP eksisterer [[arbejdslager]]begrebet ikke, dvs. man opererer ikke med [[variabler]], og [[funktion|funktionskald]]
==Moderne udvidelser==
▲Moderne [[LISP-dialekter]] tillader et vist mål af bivirkninger, fx i forbindelse med udskrivning, filoperationer og operativsystemkald. Nogle af dialekterne
==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
Denne egenskab kaldes også [[closure]].
==LISP-dialekter==
Blandt de mest udbredte og mere moderne Lisp-dialekter er:
* [http://en.wikipedia.org/wiki/Common_Lisp_Object_System| Common Lisp Object System (CLOS)], som udvider klassisk Lisp med avancerede faciliteter til objektorienteret programmering.
* [http://en.wikipedia.org/wiki/Scheme_(programming_language)| Scheme]
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å==
*[http://en.wikipedia.org/wiki/Logo_(programming_language)| Logo]
[[Kategori:Datalogi]]
[[Kategori:Programmeringssprog]]
|