Lisp
Lisp | |
---|---|
Paradigma | funktionaalinen |
Muistinhallinta | automaattinen roskienkeruu |
Julkaistu | 1958 |
Kehittäjä | John McCarthy |
Murteet | Common Lisp, Scheme, Emacs Lisp, AutoLISP, Clojure, MultiLisp, Interlisp, PicoLisp, newLISP |
Käyttöjärjestelmä | alustariippumaton |
Uutisryhmä | comp.lang.lisp |
Lisp on usean lähestymistavan refleksiivinen ohjelmointikieli.
Nimi Lisp tulee englannin kielen sanoista ”List Processing”. Linkitetyt listat ovat Lispin pääasiallisia datarakenteita, ja identtiset perustason listaoperaatiot toimivat kaikissa Lispin murteissa. Muita yleisiä ominaisuuksia Lispin murteissa ovat vahvat dynaamisen tyypit, tuki funktionaaliselle ohjelmoinnille ja kyky muokata lähdekoodia datana.
Tällä hetkellä kaksi yleisintä Lisp-murretta ovat Scheme ja Common Lisp. Lispistä puhuttaessa tarkoitetaan yleensä jälkimmäistä. Moni nykyisin suosittu kieli on ottanut vaikutteita Lispistä (ehtorakenteet, silmukat, roskienkeruu jne.). Lispissä ei tehdä eroa sisäänrakennetun ja ohjelmoijan tekemän funktion välille, joten Lisp on helposti laajennettavissa. Tämä mahdollistaa sen, että Lispillä on erittäin helppo tehdä sisäkkäisiä ohjelmointikieliä, mistä Common Lispin loop-makro on hyvä esimerkki. Useimmiten Lisp-ohjelmoija kirjoittaa kielen sopimaan kulloiseenkin ohjelmointitehtävään sen sijaan että jakaisi ohjelman ratkaiseman ongelman jatkuvasti pienempiin osiin kunnes se on tarpeeksi pieni kielellä ratkaistavaksi. Tätä kutsutaan alhaalta ylös -ohjelmointitekniikaksi, jossa kieli sovitetaan ohjelmaan.
Historia
[muokkaa | muokkaa wikitekstiä]Lisp perustuu Alonzo Churchin lambdakalkyylin laajennukseen.[1]
Kielen ensimmäisen version kehitti John McCarthy vuonna 1958,[2] ja kielen kuvaava artikkeli julkaistiin Communications of the ACM -lehdessä 1960. Ensimmäisen varsinainen käytännöllisen toteutuksen teki Steve Russell IBM 704 -tietokoneelle.[3]
LISP-kielen varhaisia toteutuksia tehtiin IBM 704:llä, IBM 7090:llä, Digital Equipment Corporationin (DEC) PDP-1:llä, PDP-6:lla ja PDP-10:llä. LISP 1.5 oli pääasiallinen LISP-murre vuosina 1960-1965. Myöhemmin Lispiä kehittivät Massachusetts Institute of Technology (MIT), Stanford University ja Carnegie Mellon University (CMU) 1960-luvun puolivälistä 1970-luvulle. 1970-luvun alussa kielen pääasialliset toteutukset olivat MacLisp ja Interlisp.[4]
Lisp-koneet kehitettiin 1960-luvun lopussa. Nämä olivat nimenomaan Lispiä ajamaan kehitettyjä yleiskäyttöisiä tietokoneita. Kehittyneimmissä käytettiin suorittimen mikrokoodia ajamaan tavukoodiksi käännetty ohjelma.[4]
1980- ja 1990-luvulla Lisp-kielestä oli jo olemassa useita eri variaatioita, ja vuonna 1994 päästandardiksi nousi Common Lisp, joka on ANSI-standardi (ANSI X3.226-1994 Information Technology Programming Language Common Lisp).
1990-luvun puolella kiinnostus Lisp-kieleen väheni. Kiinnostus on kuitenkin kasvanut 2000-luvulla, hyvinä syinä esimerkiksi kattavien avoimeen lähdekoodiin pohjautuvien Lisp-järjestelmien saatavuus, ja joidenkin ”Lisp-evankelistojen” (kuten Paul Graham) tekemä työ. Lispin suosiota ovat pitäneet yllä myös GNU Emacs -editori joka on pääasiassa kirjoitettu Emacs Lispillä sekä erästä Lispiä hyödyntänyt Naughty Dog -videopeliyhtiö.[5]
Esimerkkejä
[muokkaa | muokkaa wikitekstiä]Muotoiltu merkkijono ja yhteenlasku
[muokkaa | muokkaa wikitekstiä](ajettu Lisp-tulkissa)
> (format t "5 + 5 = ~D" ( + 5 5))
5 + 5 = 10
NIL
Sijoitus, funktion määrittely ja kutsu
[muokkaa | muokkaa wikitekstiä](suoritettava ohjelma)
;; Sijoitus
(setq a 5)
(setq h 4)
;; Funktion määrittely
(defun ala (a h)
(/ ( * a h ) 2 ))
;; Funktion kutsu
(setq A (ala a h))
(format t "~D" A)
Murteet
[muokkaa | muokkaa wikitekstiä]Kielestä on useita variaatioita ja murteita kuten:
Katso myös
[muokkaa | muokkaa wikitekstiä]Lähteet
[muokkaa | muokkaa wikitekstiä]- ↑ Timo Knuutila: LISP ja lambda-kalkyyli (html) (Ohjelmointikielten Perusteet k-98, Turun Yliopisto, Tietojenkäsittelyoppi) cs.utu.fi. Viitattu 10.1.2012.[vanhentunut linkki]
- ↑ http://www-formal.stanford.edu/jmc/recursive/node1.html
- ↑ http://jmc.stanford.edu/articles/lisp/lisp.pdf
- ↑ a b https://redirect.cs.umbc.edu/courses/331/resources/papers/Brief-History-of-Lisp.pdf
- ↑ Shumaker, Scott: Higher Level Languages (Was: Next Gen Multiplatform Load Balancing) web.archive.org. 11.8.2005. Viitattu 26.11.2024. (englanniksi)
Kirjallisuutta
[muokkaa | muokkaa wikitekstiä]- Hyvönen, Eero & Seppänen, Jouko: LISP-maailma: Johdatus kieleen ja ohjelmointiin, s. 1–362. Helsinki: Kirjayhtymä, 1986. ISBN 951-26-2787-6
- Hyvönen, Eero & Seppänen, Jouko: LISP-maailma 2: Ohjelmointimenetelmät ja -järjestelmät, s. 1–293. Helsinki: Kirjayhtymä, 1987. ISBN 951-26-2834-1
- Winston, Patrick Henry & Horn, Berthold Klaus Paul: LISP, s. 1–430. Addison-Wesley, 1981. ISBN 0-201-08329-9
Aiheesta muualla
[muokkaa | muokkaa wikitekstiä]- Kuvia tai muita tiedostoja aiheesta Lisp Wikimedia Commonsissa
- ilmainen Practical Common Lisp -kirja
- Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I – Internet Archive (PDF) (englanniksi)
- On Lisp -kirja (Arkistoitu – Internet Archive) (englanniksi)
- CLiki, Common Lisp -wiki (englanniksi)