1.060.379

kiadvánnyal nyújtjuk Magyarország legnagyobb antikvár könyv-kínálatát

A kosaram
0
MÉG
5000 Ft
a(z) 5000Ft-os
szállítási
értékhatárig

Deklaratív Programozás

Oktatási segédlet/Bevezetés a logikai programozásba/Budapesti Műszaki és Gazdaságtudományi Egyetem Villamosmérnöki és Informatikai Kar

Szerző
Budapest
Kiadó: Számítástudományi és Információelméleti Tanszék
Kiadás helye: Budapest
Kiadás éve:
Kötés típusa: Tűzött kötés
Oldalszám: 226 oldal
Sorozatcím:
Kötetszám:
Nyelv: Magyar  
Méret: 20 cm x 15 cm
ISBN:
Megjegyzés: Oktatási segédlet.
Értesítőt kérek a kiadóról

A beállítást mentettük,
naponta értesítjük a beérkező friss
kiadványokról
A beállítást mentettük,
naponta értesítjük a beérkező friss
kiadványokról

Előszó

Ez a jegyzet a Deklaratív Programozás (korábban Programozási Paradigmák) tárgy logikai programozás részéhez készült oktatási segédanyag.
A logikai programozás (LP) alapgondolata, hogy... Tovább

Előszó

Ez a jegyzet a Deklaratív Programozás (korábban Programozási Paradigmák) tárgy logikai programozás részéhez készült oktatási segédanyag.
A logikai programozás (LP) alapgondolata, hogy programjainkat a (matematikai) logika nyelvén, állítások formájában írjuk meg. Míg a funkcionális nyelvek a matematikai függvényfogalomra, addig a logikai nyelvek a reláció fogalmára építenek. A legismertebb logikai programozási nyelv a Prolog (PROgramming in LOGic, azaz programozás logikában).
A logikai programozás ötlete Róbert Kowalskitól származik [3|. Az első Prolog megvalósítást Alain Colmerauer csoportja készítette el a Marseille-i egyetemen 1972-ben [7]. A Prolog Magyarországon is hamar elterjedt, talán azért is mert igény volt egy ilyen magasszintű programozási nyelvre, és a funkcionális nyelveknek nem volt olyan kultúrája, mint pl. az Egyesült Államokban. Az 1975-ben Szeredi Péter által elkészített Prolog interpreter [5] felhasználásával több tucat, igaz többnyire kísérleti jellegű Prolog alkalmazás készült Magyarországon [8]. A Prolog hatékony megvalósítási módszereinek kidolgozása Dávid H. D. Warren nevéhez fűződik, aki 1977-ben elkészítette a nyelv első fordítóprogramját (az ún. DEC-10 Prolog rendszert), majd 1983-ban kidolgozta a máig is legnépszerűbb megvalósítási modellt, a WAM-ot (Warren Abstract Machine) [9].
1981-ben a japán kormány egy nagyszabású számítástechnikai fejlesztési munkát indított el, az ún. „ötödik generációs számítógéprendszerek" projektet, amelynek alapjául a logikai programozást választották. Ez nagy lökést adott a terület kutató-fejlesztő munkáinak, és megjelentek a kereskedelmi Prolog megvalósítások is. Az 1980-as években Magyarországon is több kereskedelmi Prolog megvalósítás készült, az MProlog [1] és a CS-Prolog nyelvcsalád [2]. Bár a japán ötödik generációs projektben nem sikerült elérni a túlzottan ambiciózus célokat, és ez a 90-es évek elején a logikai programozás presztízsét is némileg megtépázta, mára a Prolog nyelv érett és világszerte elfogadott nyelvvé vált. 1995-ben megjelent a Prolog ISO szabványa is, és egyre több ipari alkalmazással is találkozhatunk.
Az elmúlt 10 évben a Prolog mellett újabb LP nyelvek is megjelentek, pl. az elsősorban nagyméretű, ipari alkalmazásokat megcélzó Mercury nyelv, továbbá a CLP (Constramt Logic Programming) nyelvcsalád, amely az operációkutatás ill. a mesterséges intelligencia eredményeit hasznosítva erősebb logikai következtetési mechanizmust biztosít.
A jegyzetben az ISO szabványt is támogató SICStus Prolog rendszert használjuk. A jegyzet első felében bemutatott nyelvi elemek azonban mind olyanok, amelyek más, az ún. Edinburgh-i tradíciót követő megvalósításokban is mind megtalálhatók. A hallgatók rendelkezésére bocsátott SICStus Prolog mellett így gyakorlásra használható a szabadon terjeszthető SWI Prolog illetve a GNU Prolog is.
Ezeknek a megvalósításoknak a kézikönyvei elérhetők a világhálón, mint ahogy számos további információforrás is. Ezekről az 1.1 táblázat ad áttekintést. A Prolog magyar nyelvű irodalma meglehetősen szerény, az MProlog rendszert ismertető |10] illetve a Prolog eset-tanulmányokat tartalmazó [4] áll rendelkezésre. Egy rövid Prolog fejezet szerepel a Mesterséges Intelligencia c. monográfiában is [6]. Vissza

Tartalom

1. Bevezetés 1
2. Deklaratív programozás - logikai programozás 3
2.1. Programozási nyelvek osztályozása 3
2.2. Egy egyszerű példaprogram 4
2.3. A logikai programozás alapgondolata 7
3. A Prolog nyelv alapjai 9
3.1. A Prolog programok elemei 9
3.1.1. Tényállítások 9
3.1.2. A Prolog rendszer használata 12
3.1.3. Szabályok 13
3.1.4. Predikátum definiálása több szabállyal 15
3.1.5. Diszjunkciók 16
3.2. Prolog programok végrehajtása
3.2.1. A végrehajtási mechanizmus alapelemei 17
3.2.2. Paraméter-átadás - egyesítés 18
3.2.3. A redukciós lépés 19
3.2.4. A Prolog végrehajtási algoritmusa 19
3.2.5. Egy végrehajtási példa 20
3.2.6. Egy aritmetikai példa 23
3.3. A Prolog végrehajtás eljárás-doboz modellje - nyomkövetés 25
3.4. Összetett adatstruktúrák 28
3.4.1. Listák 28
3.4.2. Listaelemek keresése 29
3.4.3. Listák összefűzése 32
3.4.4. Gyakorló feladatok 35
3.4.5. Körmentes út keresése 35
3.4.6. Rekord-struktúrák 36
3.4.7. Gráfok mint adatstruktúrák 38
3.4.8. Az egyesítési algoritmus 39
3.4.9. Operátorok 40
3.4.10. Az operátorok alkalmazása 41
3.4.11. Gyakorló feladatok 42
3.5. -A Prolog szintaxis összefoglalása 42
3.6. Típusok Prologban 44
3.6.1. Típusdeklarációk 45
3.6.2. Predikátum-deklarációk 45
3.6.3. Módinformáció megadása a beépített eljárásoknál 46
4. Programozási módszerek 47
4.1. A keresési tér szűkítése 47
4.1.1. A vágó beépített eljárás 47
4.1.2. A vágások fajtái 48
4.1.3. Példák a vágó használatára 51
4.2. Determinizmus és indexelés 53
4.2.1. Indexelés 53
4.2.2. Listakezelő eljárások indexelése 54
4.2.3. Aritmetikai eljárások indexelése 55
4.2.4. A vágó és az indexelés kölcsönhatása 55
4.2.5. A vágó és az indexelés hatékonysága 56
4.3. Jobbrekurzió és akkumulátorok 56
4.3.1. Jobbrekurzió 56
4.3.2. Akkumulátorok 57
4.3.3. Listák gyűjtése 58
4.4. Algoritmusok Prologban 60
4.5. Megoldások gyűjtése és felsorolása 62
4.6. Megoldásgyűjtő beépített eljárások 66
4.7. Beépített metarlogikai eljárások 68
4.7.1. Kifejezések osztályozása 68
4.7.2. Struktúrák szétszedése és összerakása 70
4.7.3. Konstansok szétszedése és összerakása 74
4.7.4. Kifejezések rendezése: szabványos sorrend 75
4.8. Egyenlőségfajták 77
4.9. Modularitás 79
4.10. Magasabbrendű eljárások 80
4.10.1. Meta-eljárások megoldásgyűjtő eszközökkel 81
4.10.2. Részlegesen paraméterezett eljárások 81
4.10.3. Részleges paraméterezést használó magasabbrendű eljárások 82
4.11. Dinamikus adatbáziskezelés 83
4.11.1. Beépített eljárások 83
4.11.2. Alkalmazási példák dinamikus predikátumokra 84
4.12. Nyelvtani elemzés Prologban - Definite Clause Grammars 86
4.12.1. Példasor: számok elemzése 86
4.12.2. A DCG nyelvtani szabályok szerkezete - összefoglalás 89
4.12.3. További példák 90
4.12.4. DCG használata elemzésen kívül 94
4.13. Nagyobb példák 95
4.14. Gyakorló feladatok 99
5. A legfontosabb beépített eljárások 103
5.1. A predikátumleírások formátuma 103
5.2. Vezérlési eljárások 104
5.3. Dinamikus adatbáziskezelés 108
5.4. Aritmetika 109
5.4.1. Prolog kifejezések mint aritmetikai kifejezések kiértékelése 109
5.4.2. Összetett aritmetikai kifejezések 110
5.4.3. Aritmetikai eljárások 110
5.5. Kifejezések osztályozása 111
5.6. Kifejezések összehasonlítása és egyesítése 112
5.7. Listakezelés 114
5.8. Kifejezések szétszedése és összerakása 115
5.8.1. Struktúrák szétszedése és összerakása 115
5.8.2. Konstansok szétszedése és összerakása 117
5.9. összes megoldás keresése 119
5.10. Kiírás 120
5.11. Beolvasás 124
5.12. Bevitel/kiírás szervezése
5.13. Egy összetettebb példa 130
5.14. Programfejlesztés 131
5.15. Hibakezelés (kivételkezelés) 136
5.15.1. Hibakifejezések 137
5.16. Gyakorló feladatok 138
6. Fejlettebb nyelvi és rendszerelemek 141
6.1. Modularitás 141
6.1.1. Név-alapú modell (pl. MProlog, LPA Prolog) 141
6.1.2. Eljárás-alapú modell (pl. SWI, SICStus, Quintus) 142
6.1.3. A SICStus modulfogalma 143
6.2. Külső nyelvi interfész 143
6.3. Füzérek (string) kezelése 145
6.4. További hasznos lehetőségek SICStus Prologban 145
6.5. Fejlett vezérlési lehetőségek SICStusban 146
6.5.1. Blokk-deklaráció 146
6.5.2. Korutinszervező eljárások 148
6.6. SICStus könyvtárak 149
7. Fordítóprogram-írás Prologban 151
7.1. A forrásnyelv és a célnyelv 151
7.2. A fordítóprogram szerkezete és adatstruktúrái 154
7.2.1. A fordítás fázisai 154
7.2.2. A forrásnyelv absztrakt szintaxisa 154
7.2.3. A (becímzetlen) tárgykód struktúrája 156
7.2.4. A szótár struktúrája 157
7.3. Kódgenerálás 158
7.3.1. Értékadás fordítása 158
7.3.2. Kifejezések fordítása 158
7.3.ÍJ. Feltételes utasítások fordítása 160
7.3.4. További utasítások fordítása 161
7.4. Becímzés 161
7.5. Nyelvtani elemzés 162
7.5.1. A Prolog elemzőre épülő nyelvtani elemző 162
7.5.2. Definite Clause Grammars 163
7.6. Lexikai elemzés 163
7.7. Kiírás 163
8. Új irányzatok a logikai programozásban 165
8.1. Párhuzamos megvalósítások 165
8.2. Az Andorra-I rendszer rövid bemutatása 166
8.2.1. Basic Andorra Model 166
8.2.2. Egy egyszerű interpreter az Andorra alapmodellre 167
8.2.3. Az Andorra interpreter 168
8.3. A Mercury nagyhatékonyságú LP megvalósítás 169
8.4. CLP (Constraint Logic Programming) 172
8.4.1. CLP végrehajtási mechanizmus 172
.8.4.2. Példa-párbeszéd a SICStus clpr kiterjesztésével 173
8.4.3. CLP végrehajtás véges tartományokon alapuló rendszerekben 176
8.4.4. Példarpárbeszéd a SICStus clpfd kiterjesztésével 176
8.4.5. Két egyszerű clpfd példaprogram 177
A. Fogalom-tár 179
B. A gyakorló feladatok megoldásai 185
GY1. feladat 185
GY2. feladat 185
GY3. feladat 187
GY4. feladat 187
GY5. feladat 188
GY6. feladat 189
GY7. feladat 190
GY8. feladat 191
GY9. feladat 193
GY10. feladat 194
GY11. feladat 196
GY12. feladat 197
GY13. feladat 199
GY14. feladat 201
GY15. feladat 202
GY16. feladat 204
GY17. feladat 205
GY18. feladat 206
GY19. feladat 208
C. A logikai programozás előzményei 211
C.l. Programspecifikácó és programgenerálás 211
C.2. A logikai programozás sémája 213
C.3. A logikai programozástól a Prolog programnyelvig 213
D. A logikai programozás történetéről 217
D.l. Bevezetés 217
D.2. Mi a logikai programozás 217
D.3. A logikai programozás első évtizede, a Prolog születése 218
D.4. A logikai programozás második évtizede, a japán 5. generációs projekt 220
D.5. A logikai programozás ma 221
Irodalomjegyzék 223
Megvásárolható példányok

Nincs megvásárolható példány
A könyv összes megrendelhető példánya elfogyott. Ha kívánja, előjegyezheti a könyvet, és amint a könyv egy újabb példánya elérhető lesz, értesítjük.

Előjegyzem