[...]
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.
[...]