Увод

Прва два поглавља описују уску везу између два основна елемента програмирања: функција и података. Приказано је како се функцијама може манипулисати подацима помоћу функција вишег реда. Такође је приказано и како подаци могу бити обдарени различитим понашањима помоћу преношења порука и објектног система. Такође су проучаване технике за организовање великих и сложених програма, као што су функционална апстракција, апстракција података, наслеђивање класа и генеричке функције. Ови кључни концепти чине снажну основу на којој се могу градити модуларни, одрживи и прошириви програми.

Ово поглавље се фокусира на трећи основни елемент програмирања: саме програме. Пајтон програм је само колекција текста. Само кроз поступак тумачења врше се било каква значајна израчунавања заснована на том тексту. Програмски језик као што је Пајтон користан је јер се може дефинисати интерпретатор, програм који извршава Пајтонова вредновања и процедуре извршавања. Није претерано ако се ово сматра најосновнијом идејом у програмирању, да је интерпретатор, који одређује значење израза у програмском језику, само још један програм.

Ценити ову поенту значи променити слику о себи као програмерима. Долазимо до једне нове улоге, а то је да себе доживљавамо као пројектанте језика, а не само као кориснике језика које су пројектовали други.

Програмски језици

Програмски језици се прилично разликују у својим синтаксним структурама, особинама и домену примене. Међу програмским језицима опште намене, конструкти дефиниције функције и примене функције су свеприсутни. С друге стране, постоје моћни језици који не укључују објектни систем, функције вишег реда, додељивање или чак контролне конструкције као што су while и for петље. Као пример врло моћног језика са минималним скупом својстава, биће представљен програмски језик Ским. Подскуп Скима уведен у овом тексту уопште не дозвољава променљиве вредности.

У овом поглављу проучава се пројектовање интерпретатора и рачунских поступака које они стварају приликом извршавања програма. Изглед пројектовања интерпретатора за општи програмски језик може изгледати застрашујуће. Напокон, интерпретатори су програми који могу да изврше било које могуће израчунавање, у зависности од сопственог улаза. Међутим, многи интерпретатори имају елегантну заједничку структуру: две међусобно рекурзивне функције. Прва вреднује изразе у окружењима; друга примењује функције на аргументе.

Ове функције су рекурзивне по томе што су дефинисане једна у односу на другу: примена функције захтева вредновање израза у њеном телу, док вредновање израза може подразумевати примену једне или више различитих функција.