(toiminnot)

hwechtla-tl: Yhdistetyt merkkien kaltaiset tietotyypit: viime muutokset

[...]

Samoin kuin Logossa, Lispissäkin numerot ja kirjaimet olivat vain atomin (sanan, ''symbolin'') [symboli]n) alatyyppi, ja samoin kuin Logossa, Lispissäkin tarvittiin jokin keino hajottaa atomeita (sanoja). (Käsittelymme on muuten siinä mielessä anakroninen, että Logo on tietenkin suunniteltu Lispin pohjalta eikä päin vastoin.) Lisp 1.5 lähestyi atomiytimen rakennetta eri tavalla kuin Logo: koko atomien sisäisen rakenteen manipulointi perustui yhdelle fissio-operaatiolle (unpack) ja yhdelle fuusio-operaatiolle (pack). Esimerkiksi (pack '(yksi kaksi 3)) tuotti atomin 'yksikaksi3 ja (unpack 'yksikaksi3) tuotti listan '(y k s i k a k s i 3). Jopa sellaiset kummallisuudet kuin (unpack 655) ja (pack '(foo (bar baz))) toimivat. Nämä rutiinit olivat edelleen olemassa INTERLISP-ympäristössä, josta voisin muuten mainita, että Lisp-koneiden INTERLISP-D oli melko varmasti hienoin ohjelmointiympäristö (vaikkei välttämättä kieli), jonka maailma on tähän päivään mennessä nähnyt.

Jossain vaiheessa kuitenkin tästä omalaatuisesta ja yksinkertaisesta järjestelmästä luovuttiin, ja Lispiin omaksuttiin yhä enemmän muista ohjelmointikielistä tuttuja tyyppejä, jotka tavallaan olivat jo tuettuina Lisp:ssä eri muodossa. Merkkijonot olivat todennäköisesti ensimmäinen. Niiden hyödyllisyys perustuu siihen, että on olemassa monia tilanteita, joissa on paljon rakenteetonta dataa; rakenteettomuus viittaa siihen, että se olisi parempi mallittaa atomeilla, mutta atomeiden hankalahko ydinreaktiokäsittely aiheuttaa sen, että ne eivät ole käteviä suurille tietomäärille. Tarvittiin "helposti muokattavaa" atomia, merkkijonoa. Merkkijonot oli mahdollista toteuttaa atomeja helpommin erityisesti siksi, että niiden ei tarvinnut olla uniikkeja: kaksi samansisältöistä merkkijonoa sai olla eri merkkijono (kaksi samannäköistä atomia tai sanaa olivat aina sama atomi/sana). Kun merkkijonot oli lisätty kieleen, merkkien lisääminen tuli luonnolliseksi. Esimerkiksi nykyisessä Schemessä, jos haluan katsoa, onko symbolin ensimmäinen kirjain iso, kirjoitan (char-upper-case? (string-ref (symbol->string symb) 0)). Ja kun merkit ja merkkijonot ovat olemassa eivätkä luvut ole enää atomeja, monille alkaa olla vaikeaa enää ymmärtää, miksi symbolit [symboli]t ovat olemassa. Ennen kuin olin tutustunut tähän asiaan, näin jossain FAQ-vastauksia, joissa kerrottiin, miksi (pack) ja (unpack) olivat kiellettyjä ja tuomittavia kapistuksia.

[...]


(viimeksi muutettu 15.04.2013 10:50)