Kazimir Majorinc Moćan koliko je god moguće eval[e; a] = [atom[e] → assoc[e; a]; atom[car[e]] → [eq[car[e]; QUOTE] → cadr[e]; eq[car[e]; ATOM] → atom[eval[cadr[e]; a]]; eq[car[e]; EQ] → eq[eval[cadr[e]; a]; eval[caddr[e]; a]]; eq[car[e]; COND] → evcon[cdr[e]; a]; eq[car[e]; CAR] → car[eval[cadr[e]; a]]; eq[car[e]; CDR] → cdr[eval[cadr[e]; a]]; eq[car[e]; CONS] → cons[eval[cadr[e]; a]; eval[caddr[e]; a]]; T → eval[cons[assoc[car[e]; a]; cdr[e]]; a]]; eq[caar[e]; LABEL] → eval[cons[caddar[e]; cdr[e]]; cons[list[cadar[e]; car[e]]; a]]]; eq[caar[e]; LAMBDA] → eval[caddar[e]; append[pair[cadar[e];evlis[cdr[e];a]]; a]]] Kazimir Majorinc: Moćan koliko je god moguće Glavne ideje Lispa u McCarthyjevom periodu Multimedijalni institut ISBN 978-953-7372-28-6 CIP zapis je dostupan u računalnome katalogu Nacionalne i sveučilišne knjižnice u Zagrebu pod brojem 000910180. Zagreb, srpanj 2015. Ova knjiga dana je na korištenje pod licencom Creative Commons Imenovanje ∞ Bez prerada 4.0 međunarodna. Kazimir Majorinc Moćan koliko je god moguće Glavne ideje Lispa u McCarthyjevom periodu Multimedijalni institut Sadržaj 1. Uvod → 10 2. Rani utjecaji na McCarthyja → 13 2.1. Tehnološki entuzijazam → 14 2.2. Konačni automati i eksplicitne reprezentacije činjenica → 14 2.3. Digitalna računala kao inteligentni strojevi → 16 3. Dartmouthški projekt → 17 3.1. Jezik inteligentnih računala → 18 3.2. Između IPL-a i Fortrana → 19 4. FLPL → 20 4.1. Operacije nad riječima → 21 4.2. Liste → 22 4.3. Kreiranje lista → 23 5. Prijedlog kompajlera → 26 5.1. Programski jezik kao koordinatni sustav → 27 5.2. Sloboda programera → 28 5.3. Logičke vrijednosti i funkcije → 28 5.4. Funkcija if → 29 5.5. Sintaksa → 29 5.6. Liste → 30 5.7. Funkcije s višestrukim vrijednostima i kompozicija funkcija → 30 6. Prijedlog programskog jezika → 32 6.1. Uvjetna naredba → 33 6.2. Go to naredba → 33 6.3. Makro naredba → 34 6.4. Funkcije višeg reda → 35 6.5. Lambda-izrazi → 36 7. Imperativni Lisp → 37 7.1. Imperativni i algebarski jezik → 40 7.2. Osnovni tipovi i naredbe → 41 7.3. Potprogrami i “funkcije” → 43 7.4. Simbolički izrazi → 44 7.5. Liste svojstava → 45 7.6. Liste i reprezentacija simboličkih izraza → 45 7.7. Funkcije za analizu i sintezu riječi i referenciranje → 48 7.8. Upravljanje slobodnom memorijom → 49 7.9. Osnovne operacije nad cijelim listama → 50 7.10. Funkcija maplist → 51 8. Elementi funkcionalnog programiranja → 53 8.1. Nova funkcija maplist → 54 8.2. McCarthyjevi lambda-izrazi → 55 8.3. Pojednostavljenje jezika → 58 8.4. Implementacija rekurzivnih funkcija → 60 8.5. Funkcionalni i imperativni stil → 60 8.6. Nede∫nabilnost funkcije list → 61 8.7. Supstitucijske funkcije i funkcija apply → 62 8.8. Pomoćne funkcije i implementacija apply → 63 8.9. Automatizirano upravljanje memorijom → 66 8.10. Rochesterovi lambda izrazi → 66 8.11. Formatiranje programa → 67 8.12. Kompozicije funkcija car i cdr → 67 8.13. Funkcija compute → 67 9. Čisti Lisp → 68 9.1. Matematički izrazi → 72 9.2. Uvjetni izrazi → 72 9.3. Rekurzivno i simultano rekurzivno de∫nirane funkcije → 73 9.4. Lambda-izrazi → 74 9.5. Label-izrazi → 75 9.6. Slobodne i vezane varijable → 76 9.7. Primjedba o simultano rekurzivnim funkcijama → 77 9.8. De∫nicija simboličkih izraza → 77 9.9. Razlika u odnosu na prethodne de∫nicije → 78 9.10. Meta-izrazi → 80 9.11. S-funkcije → 80 9.12. Elementarne S-funkcije → 81 9.13. Primjedbe uz McCarthyjevo de∫niranje S-funkcija → 83 9.14. Primjeri ne-elementarnih S-funkcija → 85 9.15. Pokrata i funkcija list → 89 9.16. Funkcije kao argumenti funkcija → 89 9.17. Primjedba o eliminiranju pokrata i ne-elementarnih S-funkcija → 90 9.18. Prevođenje M-izraza u S-izraze → 92 9.19. Primjedbe o prevođenju M-izraza → 95 9.20. Matematička de∫nicija S-funkcije eval → 97 9.21. S-funkcija eval → 101 9.22. Primjedbe uz de∫niciju funkcije eval → 103 9.23. Univerzalna S-funkcija apply → 105 9.24. Interpreter za Lisp → 106 9.25. S-funkcije i teorija izračunljivosti → 107 9.26. Simulacija Turingovih strojeva S-funkcijom → 108 9.27. Pitanja o S-funkcijama neodlučiva S-funkcijom → 114 9.28. Programi kao S-funkcije → 116 9.29. Predstavljanje simboličkih izraza u memoriji računala → 117 9.30. Razlike između simboličkih izraza i struktura lista → 118 9.31. Garbage collection → 119 10. Linearni Lisp → 121 10.1. L-izrazi → 122 10.2. Elementarne funkcije → 123 10.3. Izdvajanje podizraza → 124 11. Binarni Lisp → 125 12. Slagleov jezik za manipulaciju simbola → 127 13. Simbolički izrazi kao sintaksa jezika → 129 14. Fortranolike naredbe, funkcija program, moć i multiparadigmatičnost Lispa → 132 14.1. Kodiranje stanja stroja i fortranolikih naredbi → 133 14.2. S-funkcija program → 134 14.3. Simultano izvršavanje fortranolikih naredbi i uređaj među simbolima → 135 14.4. Multiparadigmatičnost Lispa → 135 14.5. Moć jezika sa stanovišta programera → 137 15. Woodward-Jenkinsova aritmetika → 139 16. Lisp 1.5 → 142 16.1. Čisti Lisp → 144 16.2. Upotreba liste svojstava → 147 16.3. Pseudofunkcije → 149 16.4. Specijalne forme → 151 16.5. Fexprovi → 151 16.6. Programi u LISP-u → 153 16.7. Funkcionalni argumenti → 155 16.8. Specijalni operator prog → 158 16.9. Gensym i oblist → 159 16.10. Simboli T, *T* i NIL → 161 16.11. Aritmetika → 162 16.12. Polja → 163 16.13. Logika → 163 17. Matematička teorija izračunavanja → 165 17.1. Funkcije de∫nirane osnovnim funkcijama → 167 17.2. Funkcionali → 167 17.3. Uklonjivost label-izraza → 168 17.4. Uvjetni izrazi nisu funkcije → 171 17.5. Neizračunljive funkcije → 171 17.6. Višeznačne funkcije → 172 17.7. Rekurzivna de∫nicija skupa simboličkih izraza → 172 17.8. Rekurzivna indukcija → 173 17.9. Apstraktna sintaksa programskih jezika → 174 17.10. Semantika → 176 18. Gilmoreov lispoliki jezik → 178 18.1. Uvjetni izrazi → 179 18.2. Quote i label → 179 18.3. Apstraktni stroj → 180 19. Memoizacija → 182 20. Nova funkcija eval → 186 20.1. Prošireni Lisp → 187 20.2. Novi eval → 188 20.3. Autonimi lambda i label → 189 21. Prve primjene Lispa → 190 Slike → 195 Bibliogra∫ja → 196 Moćan koliko je god moguće Glavne ideje Lispa u McCarthyjevom periodu 1. Uvod “In developing LISP our first goal is to describe a lan- guage which is as powerful as possible from the point of view of the programmer.” 1 Većina programera se prvi puta susreće s Lispom preko nekog od brojnih citata i aforizama u kojima se, ponekad i preko mjere, ističu ljepota, elegancija i moć jezika. Tako se, primjerice, razumijevanje Lispa naziva prosvjet­ ljenjem; tvrdi se da iskustvo programiranja u Lispu čini programera boljim, čak i ako nikad u životu ne bude ko­ ristio Lisp. Jeziku se, doduše u šali, pripisuju mistična svojstva; bog (ili bogovi) su svijet napisali u Lispu, a Lisp zajednica se opisuje kao kult. Odluči li programer proučiti Lisp, zacijelo će zaključiti da je Lisp začuđujuće moćan, ali jednako tako začuđujuće jednostavan programski jezik. Moć je manje upitna; želi li dizajner jezika stvoriti moćan jezik, uloži li dovoljno vre­ mena i napora, teško da neće i uspjeti. Jednostavnost je čudna; ona ostavlja dojam da je Lisp otkriven, a ne stvo­ ren. Sličan su dojam imali i članovi ARTIFICIAL INTELLI- GENCE projekta na američkom MIT­ju koji su razvili Lisp, zamišljen kao moćan, ali praktičan i vrlo složen jezik. Suprotno onome što bi se moglo očekivati, Lisp je tijekom razvoja postajao sve jednostavniji. Tek kad je glavni dizaj­ ner, John McCarthy napisao članak kojim je Lisp predsta­ vljen javnosti, članovi projekta su prepoznali Lisp kao “predmet ljepote” i sam vrijedan proučavanja. Narednih desetljeća, neki članovi Lisp zajednice su pokušali jezik učiniti još općenitijim, moćnijim, jednostav­ nijim, korektnijim opisom načina na koji programeri raz­ mišljaju. Drugi, brojniji pokušaji unapređenja potaknuti su željom da se jezik učini efikasnijim, praktičnijim, popu­ larnijim, možda čak i profitabilnijim. Čak i kad su radili kompromise, dizajneri su nastojali identificirati, zadržati, možda i unaprijediti bitne kvalitete jezika. Lisp je utjecao na druge programske jezike. U manjoj mjeri, i drugi pro­ gramski jezici su utjecali na Lisp. Različiti motivi, priori­ teti i rješenja doveli su do raspada i fragmentacije zajedni­ ce i razvoja brojnih, znatno različitih dijalekata i zajednica okupljenih oko dijalekata. 1 McCarthy, Programs in Lisp, AIM­012, 1959., str. 4. 11 U uvjetima fragmentacije zajednice i postojanja broj­ nih tumačenja osnovnih ideja, onaj tko želi razumjeti Lisp teško može izbjeći povijesni pristup; upoznavanje s ideja­ ma u obliku koji su imale kad su nastajale. Najzanimljivi­ ji period je pri tome, u pravilu, onaj najraniji. Ova knjiga pokušava izložiti nastajanje i razvoj glavnih ideja Lispa tijekom prvih nekoliko godina u kojima je John McCarthy vodio razvoj jezika. Pokušaja sistematičnog izlaganja glavnih ideja Lispa u ranom periodu je već bilo. Sam je McCarthy održao ne­ koliko predavanja i napisao nekoliko članaka o toj temi. Ranu povijest Lispa je daleko najviše istraživao Herbert Stoyan. Osim Stoyanove knjige LISP, Anwendungsgebie- te, Grundbegriffe, Geschichte iz 1980., izdane samo na nje­ mačkom jeziku i danas teško dostupne, svi radovi o povi­ jesti Lispa pisani su u obliku za čije je razumijevanje pot­ rebna već dobra upućenost u Lisp. Ova knjiga pisana je tako da bude razumljiva svakom programeru s malo isku­ stva u bilo kojem programskom jeziku. Tijekom pisanja knjige, autor je održao nekoliko dese­ taka izlaganja u Hacklabu Mama u Zagrebu. Diskusije s članovima Hacklaba su u velikoj mjeri utjecale na sadržaj i oblik knjige. U izvornim dokumentima, ime Lisp je obično pisano velikim slovima: LISP. U knjizi se koristi danas uobičajen i praktičniji način pisanja: Lisp. Izvorni način pisanja za­ držan je samo pri citiranju.
Details
-
File Typepdf
-
Upload Time-
-
Content LanguagesEnglish
-
Upload UserAnonymous/Not logged-in
-
File Pages216 Page
-
File Size-