Lisp – vanhan ajan tekoälyohjelmointikieli (Ohjelmointikielet kautta aikojen 3)

Seuraava teksti on julkaistu alunperin Linkin Facebook-sivulla 6.10.2022

Tämä julkaisu on kolmas osa syksyllä 2022 alkaneesta julkaisusarjasta, joka käsittelee erilaisia ohjelmointikieliä historian saatossa. Tervetuloa mukaan matkalle ohjelmointikielten maailmaan!

Lisp-ohjelmointikielen kehitys alkoi vuonna 1958, jolloin Dartmouthin yliopiston professori John McCarthy alkoi suunnitella uudenlaista ohjelmointikieltä. Tavoitteena oli luoda kieli, joka soveltuisi luonnollisen kielen ja ihmisen ajattelussa esiintyvien käsitteiden käsittelyyn. Lispiä ennen kehitetty Fortran tuntui sopivan huonosti tällaiseen ohjelmointiin, koska kieli oli suunnattu numeeriseen laskentaan.

Nimi Lisp tulee sanoista “LISt Processor”, mikä viittaa listojen käsittelyyn. Lisp-ohjelmassa sekä käsiteltävä data että ohjelman haluttu toiminta esitetään suluilla merkityissä listoissa. Esimerkiksi (apina banaani cembalo) on kolme sanaa sisältävä lista, kun taas lista (* (+ 1 2) (+ 3 4)) vastaa laskutoimitusta (1 + 2) * (3 + 4). Lisp-ohjelmat muodostuvat siis sisäkkäisistä listoista, minkä vuoksi koodissa on usein suuri määrä sulkeita. Tämän vuoksi nimelle Lisp on keksitty myöhemmin myös vaihtoehtoinen selitys “Lots of Irritating Silly Parentheses”.

Lisp tuli tunnetuksi erityisesti tekoälyjen ohjelmointikielenä. Tekoälyjen kehitys oli alkanut 1950-luvulla, mutta alkuinnostuksen jälkeen tilanne näytti toivottomalta. Toimivan tekoälyn rakentaminen oli paljon vaikeampaa kuin aluksi luultiin. Yksi ajatus oli, että hyvän tekoälyn voisi saada aikaan valitsemalla tekoälyn toteuttamiseen soveltuvan ohjelmointikielen. Lisp vaikutti tähän hyvältä valinnalta, koska listojen avulla pystyi esittämään esimerkiksi tekoälyn tietämystä ihmisten maailmasta.

Nykypäivän näkökulmasta tuntuu erikoiselta, että ohjelmointikielen valintaa pidettiin merkittävänä asiana tekoälyn toteuttamisessa. Kuitenkin lähestymistapa tekoälyyn oli erilainen kuin nykyään. Ennen tavoitteena oli usein luoda asiantuntijajärjestelmä, jonka muistiin kirjattiin tietoja ihmisten maailmasta, kun taas nykyään tekoälyt perustuvat usein numeerisen tiedon käsittelyyn ja raakaan laskentaan.

Lisp vaikutti merkittävästi funktionaalisen ohjelmoinnin kehitykseen. Funktionaalisen ohjelmoinnin piirteitä Lispissä olivat esimerkiksi rekursio sekä funktioiden käsittely arvoina. Rekursiota voidaan käyttää Lispissä toistamiseen niin, että silmukan sijasta funktio kutsuu itseään toistaakseen tiettyä asiaa. Funktioiden käsittely arvoina tarkoittaa puolestaan, että listassa voi olla funktioita, funktion parametri voi olla funktio ja funktio voi palauttaa funktion.

Myöhempiä funktionaalisia ohjelmointikieliä ovat esimerkiksi Scheme (1975), Haskell (1990) ja Clojure (2007).

Kuva: Tekoälyesimerkki kirjasta Lisp-maailma 2 (Hyvönen ja Seppänen 1987, Kirjayhtymä)

Leave a Reply

Your email address will not be published. Required fields are marked *