Программалауға қатысты функцияналдық амал.
Лекцияда (дәрісте) программалақ жүйелердің математикалық негіздеме мен мүмкіндіктерінің жобалауға қатынасыфункцияналдық амалдың негізіндегі даму тарихына, идиялогисынажәне пограммалық қамтамасыз етуді жүзеге асыруға қатысты мәселелер талқыланады.
Осы курс үшін маңызды, программалауға қатысты функционалдық амалға назар аударайық. Алдымен программалауға қатысты функционалдық амалдың пайда болуына алып келген іргелі математикалық зерттеулердің тарихына назар аударайық.
Функционалдық амалды негіздейтін теориялық жұмыстардың пайда болуыХХ ғасырлың 20-шы, 30-шы жылдарына жатады. Кейінірек бір көз жеткізетініміздей, пограммалау теориясыпрограммалау практикасынан едәуір түрде озып жүреді. Амалдың математикалық негізін қалыптастырған маңызды жұмыстар осы теорияны жүзеге асыруға мүмкіндіктері бар компьютерлер мен программалау тілдері пайда болғаннан көп уақыт бұрын жазылған болатын.
Алғашқы жүзеге асыруға келсек, ол ХХ ғасырдың 50-шы жылдарында LISP тілінің формуласында пайда болды енді әнгіме осы жайлы болмақ.
Біріншіден мынаны еске сала кетуіміз қажет; функционалдық маңызды сипаттамасы ол функционалдық программалаутілінде құрылған кез келген программа, аргументтері функция болып табылуы мүмкін функция ретінде қарастырылуы мүмкін.
Функционалдық амалдан бұрын айтылғандай шығу тегі LISP программалау тіліне барып тірелетін бір топ тілдер дүниеге келді. Кейінрек 70-ші жылдары ML тілінің бастапқы нұсқасы құрылған болатын. Ал кейінрек бұл тіл әсірессе SML тіліне сондай-ақ бір қатар өзге тілдерге қарай дамыды, 90-шы жылдары құрылған Haskell тілі болып табылды.
Функционалды программалау тілдерін жүзеге асырудың маңызды артықшылығы мәліметтерді сақтау үшін компьютер жадын автоматтандырылған динамикалық күйде бөліп тарту болып табылады. Бұл жағдайда программист мәліметтерді бақылау қажеттілігінен арылады, ал егер ал қажет болған жағдайда ол (программист) жадына программаға қажеті жоқ мәліметтердентазалайтын “қоқысты жинау” функциясын іске қоса алады.
Күрделі программалау функционалды амал кезінде функционалды агрегаттау арқылы құрылады. Бұл жерде программа мәтіні функцияны білдіреді, алоның кейбір аргументтерін функция ретінде қарастыруға болады. Міне осылайша кодты қайта пайдалану, құрылымы илтеративті тілдің процедурасына қарғанда математикалық жағынан мөлдір болып келетін бұдан бұрын сипатталған функцияны шақырып алуға барып тіреледі.
Функцияның, функционолдың программалау тілдері үшін табиғи формализім болып табылатындығынан, функцияларымен байланысты болып келетін прграммалаудың алуан түрлі аспектілерінің жүзеге асыру елеулі түрде ықшамдалады. Көкейкөзді түрде ашық (мөлдір) болатын ол рекурсивті фуекция, яғни аргумент ретінде өздерін-өздері шақыратын функциялар. Мәліметтердің рекур сипті құрлымдарын өндеуді жүзеге асыруда табиғи бола бастайды.
Үлгімен салыстыру механизімін жүзеге асырудың арқасында ML және Haskell секілді функционалды программалау тілдерін символдыөндеу үшін пайдаланылған жақсы.
Әрине функционалды программалау тілдері кейбір кемшіліктерден кенде емес.
Мұндай кемшіліктерге, программаның сызықсыз құрлымы мен салыстырмалы түрдегі іске асырудың төмен тиімділігін жатқызуға болды. Алайда бірінші кемшілік жеткілікті дәрежеде субьективті болып табылады, ал екіншісі қазіргі заманғы іске асырулармен, нақтырақ аутқанда SML тілінің бірқатар сонғы аударғыштары (Microsoft. NET ортасына арналған компиляторды қоса алғандағы) торапынан сәтті түрде жойылды. Функционалды программалау тілдерінде программалық қамтамассыз етудікәсіби тұрғыда құру үшін функция табиғатын терең ұғыну қажет. Функция табиғатының заңдылықтары мен ерекшеліктерін зерттеуге негізінен осы курстың 2-12 дәрістері орналасқан.
“Функция” терминіне қатысты математикалық формалдаумен программалық жүзеге асыруда әртүрлі түсініктер бар.
МәселенА анықтау атырабымен және В мәндер атырапыменF математикалық функциясы ретінде бір тәртіпке келген жұптар аталады.
осындайларды егер де
онда
в1=в2
Өз негізінде, программалау тіліндегі функция деп –аргуметті (шынайы параметірдеп аталатын) нәтижеге айналдыратын ережені сипаттаушы осы тілдің конструкциясын айтамыз.
“Функция” ұғымын формальдау үшін, ламбда – қисаптар деген атумен белгілі математикалық теория құрылған болатын. Бұл есептеуде дәлірек ламбда –конверсиялардың қисабы деп аталған жөн.
Конверсия ретінде қисаптау обьектілердің (программалауда –функциялармен мәлеметтерді) бір формадан екінші формаға уыстыруды түсінеміз. Математикадағы алғашқы есеп ол өрнек формаларын ықшамдауға деген ұмтылыс болды. Программалауда дәл осы есеп айтарлықтай мәнді болмайды. Әйтседе бұдан былай байқайтынымыздай алғашқы формалдау ретіндегіламбда – қисаптарды пайдалану программа түрін ықшамдауға жағдай жасауы мүмкін, яғни программалық кодтың тиімділенуіне алып келу мүмкін.