- •Қазақстан республикасы білім және ғылым министрлігі м.Х.Дулати атындағы тараз мемлекеттік университеті
- •Әдістемелік нұсқау Тараз 20___
- •Функционалды бағдарламалау ( haskell тілі) hugs 98 де жұмыс істеу негіздері
- •«Haskell тілінің негіздері»
- •Логикалық бағдарламалау
- •Бақылау мысалы
- •Жұмысқа тапсырма
- •Негізгі түсініктер
- •Бақылау мысалдары
- •Жұмысқа тапсырма
- •Тапсырма варианттары
- •Бақылау мысалы
- •Жұмысқа тапсырма
- •Тапсырма варианттары
- •7.№1 Сөж тапсырмалары. Жоғарғы ретті функциялар
- •Қосымша
Қосымша
А. Функционалды программалау тілдері
Қосымшада, кейбір функционалды программалау тілдерінің қысқаша сипаттамасы келтірілген (өте көп емес). Төменде келтірілген интернет – ресурстарды қарап шығып, қосымша ақпараттар алуға болады.
Lisp (List processor). Бірінші функционалды программалау тілі болып есептеледі. Типтелмеген. Бірқатар императивті қасиеттері бар, бірақ жалпы функционалды программалау стилін қолдайды. Есептеулер кезінде мәні бойынша шақыруды қолданады. Қазіргі уақытта Common Lisp При диалектісі кеңінен таратылған, ол ФП принциптерінен алшақтау. Тілді оқып үйрену қиын, себебі синтаксисі күрделі. Тілдің объектіге – бағытталған диалектісі бар, ол — CLOS.
Scheme. Lisp тілінің көптеген диалектілерінің бірі, информатика саласындағы ғылыми зерттеулерге арналған. Scheme тілін жасауда тілдің қарапайымдылығы мен сырбаздығына көңіл бөлінген. Соның арқасында, Lisp тілінің базалық версиясына қарағанда, шағын болып құрылды. Тілдің қарапайымдылығы мен стандартты функциялар кітапханасының қарапайымдылығы жағынан ерекшеленгенімен, әмбебаптық жағынан жол береді. Сонымен қоса, мұнда функционалды программалау принциптері нақтырақ сақталады.
ISWIM (If you See What I Mean). Функционалды тіл прототип. Функционалды программалау тілінің қандай болу керектігін көрсету үшін, 60-шы жылдары Ландин (США) жасап шығарды. Ландин тілмен қоса, программаларды орындауға арналған арнайы виртуалды машиналарды жасап шығарды.
ISWIM. Мәні бойынша шақыру принципіне негізделген, бұл виртуалды машина SECDмашина атауына ие болды. ISWIM тілінің синтаксисіне көптеген функционалды тілдердің синтаксисі топтастырылған. ISWIM тілінің синтаксисіне ML, әсіресе Caml тілдерінің синтаксисі өте ұқсас. .
ML (Meta Language). Типтердің полиморфты жүйесі мен параметрленген модульдері жақсы дамыған, қатаң функционалды тілдердің бүтіндей жанұясы. ML тілі әлемнің барлық университеттерінде оқытылады (кейбірінде программалаудың бірінші тілі ретінде).
Standard ML. Функционалды программалаудың типтелген тілдерінің бірі. Өзгертілетін мәндерге сілтеме сияқты, кейбір императивті қасиеттерге ие, сондықтан таза тіл болып саналмайды. Есептеулер кезінде мәні бойынша шақыруды қолданады. Модульді жүзеге асыруы өзгеше. Типтердің қуатты полиморфты жүйесіне ие. Standard ML 97 тілінің соңғы стандарты. Синтаксисі формальды математикалық түрде анықталады, және тілдің семантикасы статикалық және динамикалық.
Caml Light и Objective Caml. Standard ML тілі сияқты ML тобына жатады. Objective Caml Caml Light тілінен, негізінен, классикалық объектіге – бағытталған программалауды қолдауы жағынан ерекшеленеді. Objective Caml, Standard ML тілі сияқты қатаң тіл болып табылады, бірақ мұнда кейін есептеуге арналған функция кіріктірілген.
Miranda. Кейінге қалдырылған есептеулерді қолданатын, стандартты функционалды тіл ретінде Дэвидом Тернер (США) жасап шығарған. Типтердің қатаң полиморфты жүйесіне ие. ML тілі сияқты, бұл тіл де көптеген университеттерде оқытылады. Haskell тілін жасаушыларға көп ықпал етті. Функционалды программалау тілдерінің көп тараған, қатаң еместерінің бірі. Типтердің өте жақсы дамыған жүйесіне ие. Модуьдер жүйесі нашар дамыған.Тілдің соңғы стандарты— Haskell98.
Gofer (GOod For Equational Reasoning). Haskell тілінің қысқартылған диалектісі. Функционалды программалау негіздерін оқытуға арналған.
Clean. Параллель және бөліп программалауға арналған арнайы функционалды тіл. Синтаксисі бойынша Haskell тіліне ұқсас. Таза. Кейінге қалдырылған есептеулерді қолданады. Компилятормен қоса, Win32 және MacOS жүйелерінде графикалық пайдаланушы интерфейсін программалауға мүмкіндік беретін (I/O libraries) библиотекасының жиыны ұсынылады.
Erlang. Ericsson компаниясы жасап шығарған, коммуникация саласына бағытталған тіл; Пролог тілінен бастау алғанымен, қазір тек сыртқы жағынан ғана ұқсайды. Синтаксисі меңгеруге оңай, библиотекасы бай, соның ішінде: графикалық интерфейс, ДҚБЖ, бөліктеп есептеулер және т.б. тегін, әрі қолжетімді. Тіл параллельді – бірнеше процесстердің параллель жұмыс істеуі мен олардың өзара әрекеттесуі синтаксис деңгейінде кірістірілген. Әзірше, тек бір ғана кемшілігі бар: байткодқа компиляциялау, ол үшін жылдам емес интерпретатор қажет.
Рефал. XX ғасырдың жетпісінші жылдарында СССР-да жасалған функционалды тіл. Пролог тіліне жақын. Табиғи тілдегі, XML тіліндегі мәтіндер сияқты деректердің күрделі типтерін өңдеуде өте тиімді. Оның тиімділігі мынада, Рефал – қос бағытты тізімдерді қолданатын жалғыз тіл болып табылады, ал қосбағыттылық – кейбір программалардың көлемін қысқартуға және олардың жұмысын жылдамдатуға мүмкіндік беретін қасиет. Өкінішке орай, соңғы кездері баяу түрде жаңартылуда. Бір жағынан, тіл бойынша орыс тіліндегі құжаттар өте көп; екінші жағынан, бастапқы мәтіндер деңгейінде тиімді ету жүйесі – суперкомпиляторы бар (яғни алгоритмді тиімді ету!).
Joy. Комбинаторлық логикаға негізделген таза функционалды тіл. Сыртық түрі бойынша Форт тіліне ұқсас: кері жазба мен стек қолданылады. Теориялық негіздемесі жаман емес болғанымен, әлі де дамыту кезеңінде. Прототипті жүзеге асыруы да бар. Басқа тілдермен салыстырғанда негізгі артықшылығы – айнымалысы жоқ сызықтық жазбасы, ол программаны жазуды, тексеруді және тиімді етуді автоматтандыруды жеңілдетеді. Толықтай дамытылмағандығынан басқа, тағы бір кемшілігі – Форт, Joy тілдеріндегідей программаның оқылуы.
Б.Функционалды программалау бойынша интернет-ресурстар
Қосымшада жалпы функционалды тілдерге және жеке функционалды тілдерге арналған интернет-ресурстар келтірілген.
www.haskell.org — функционалды программалау тіліне, соның ішінде Haskell тіліне арналған өте ауқымды сайт. Құрамында түрлі анықтамалық материалдар, Haskell тілінің интерпретаторлары мен компиляторларының тізімі бар (қазіргі уақытта барлық интерпретаторлар мен компиляторлар тегін). Сонымен қатар, функционалды программалау теориясы бойынша ресурстарға сілтемелер тізімі көрсетілген. (Standard ML, Clean).
cm.belllabs.com/cm/cs/what/smlnj — Standard ML of New Jersey. Өте жақсы компилятор. Тегін дистрибутивқа компилятормен қоса, MLYacc және MLLex утилиттері мен Standard ML Basis Library библиотекасы кіреді. Компилятор мен библиотек бойынша құжаттарды бөлек алуға болады.
www.harlequin.com/products/ads/ml/ — Harlequin MLWorks, Standard ML тілінің коммерциялық компиляторы. Бірақ, біраз мүмкіндіктері шектелген тегін нұсқасын да қолдануға болады.
caml.inria.fr — институт INRIA. Caml Light и Objective Caml тілдерін жасаушылар командасының «Домашний» сайты. Құрамында байт-код пен машиналық-кодтың интерпретаторы, Caml үшін Yacc және Lex, профайлер мен жөндеуші, құжаттар мен мысалдар бар Objective Caml дистрибутивін тегін көшіріп алуға болады. Бұл компилятордың коды жылдамдығы бойынша Standard ML of New Jersey компиляторын басып озады.
www.cs.kun.nl/~clean/ — құрамында Clean тілі компиляторының дистрибутиві бар. Компилятор коммерциялық болғанымен, коммерциялық емес мақсатта қолдану тегін. Компилятор коммерциялық болғандықтан, оның сапасы жоғары (өте жылдам), жасаушы ортасымен, құжаттармен және стандартты библиотекамен жабдықталған.
В. HUGS 98 АЖ параметрлері
HUGS 98 АЖ программистке, интерпретатор мен АЖ-ны есептің ыңғайына келтіріп баптауға мүмкіндік береді. Оған АЖ баптауларды өзгерту көмегімен қол жеткізуге болады. 3 суретте. П1 үнсіз келісім бойынша жүктелген баптаулар жағдайы көрсетілген (мұндай параметрлер HUGS 98 программасын алғашқы орнату кезінде іске асырылады).
Сур 3. АЖ параметрлерін орнатуға арнлаған сұхбаттық терезе
Сұхбаттық терезенің жоғарғы жағында, ЖАЛҒАН (жалауша орнатылған), РАС (жалауша өшірілген) мәндерін қабылдай алатын жалаушалар жинағы орнатылған.
Әрбір жалауша интерпретатордың немесе қабықшаның өзінің параметрлеріне жауап беруге арналған.
Сұхбаттық терезенің төменгі жағында HUGS 98 АЖ ішкі айнымалыларын енгізуге арналған өрістер орнатылған.
Әрбір жалауша, жоғарғы және төменгі кілтті латын алфавитінің нақты бір әріптерімен бейнеленген.
Төменде сәйкес әріптермен белгіленген барлық жалаушалар сипатталған:
s
— редукциялар саны мен есептеу
орындалғаннан кейінгі жад ұяшықтарының
санын баспаға шығарады;
t — есептеуден кейінгі өрнектің типін баспаға шығарады;
f — алғашқы қатеден кейінгі есептеуді тоқтату;
g —қоқысты жинау кезіндегі, жад ұяшықтарының санын баспаға шығарады;
G — импортталған файлдарға арналған FFI кодының генерациясы;
l — үнсіз келісім бойынша скриптерді оптимизациялау;
e — оптимизацияланған скриптердегі қателерді ескерту;
. — есептеу процесін виуалды етуге арналған нүктелерді баспаға шығарады;
q — есептеу процесін виуалды етуге арналған бірде бір процессті баспаға шығармайды;
Q —баспаға шығару кезінде атауларды жіктеу;
w — жүктелген файлдардың атауларын үнемі көрсету;
k — қателердің типі мен сипаттамасын толықтай көрсету;
o — класс нұсқаларының қиылысуына мүмкіндік беру;
u — нәтижені көрсету үшін «show» функциясын қолдану;
i — жаңа файлдар жүктелгенде ескілерін жою;
A — файлдарды автоматты түрде жүктеу;
m — класс нұсқаларының резалюциясы жиынын қолдану.
