Listák, a tudás portál tudásportálban, Távoktatási

Add tudását moєї bazi

Listák - az egyik leggyakrabban használt szerkezeti Prolog. Írásakor a lista szögletes zárójelben, és az elemek a lista vesszővel vannak elválasztva, például,
[Elefánt, ló, majom, kutya]
Ez a lista a négy atom - egy elefánt, ló, majom, kutya.
Elemei a lista lehet bármilyen Prolog, t. E. Az atomok, a változók száma és összetett kifejezések, amely lehetővé teszi, különösen, hogy a listákat a listákat. Egy üres lista van írva, mint [].
Itt egy példa a listát egy bonyolultabb szerkezet:
[Elephant, [], X, őse (X, térfogat), [a, b, c], f (22)]
Az első elem nem üres lista hívják a fej és a többi lista az úgynevezett farok. A lista, amely csak az egyik eleme a fej az egyetlen elem, és a farok - az üres lista. Symbol [H | T] használják, hogy képviselje a lista egy fej H és a farok T. Ha a | elé az utolsó kifejezés a lista, az azt jelenti, hogy ez az utolsó távon meghatározza egy másik listát. Teljes lista történik, ha ezt összeegyeztetni egy al-lista elemsorozatával rendezett jellemzői.
Az alábbi 1. példa - vezetője a listán, és a [2, 3, 4, 5] - farok. Prologue megmutatja ezt összehasonlítjuk a számok listája egy minta, amely egy fej és a farok.
?- [1, 2, 3, 4, 5] = [Head | Farok].
Head = 1
Tail = [2, 3, 4, 5]
igen
Itt Head and Tail - csak a változó nevét. Jól jönne az X és Y, vagy bármely más változó nevek ugyanolyan sikerrel. Megjegyezzük, hogy a farkát a lista mindig megtalálja. A fej, viszont van egy lista elem, hogy ez igaz az összes többi elemet előtt helyezkedik el egy függőleges vonal. Ez lehetővé teszi, hogy, mondjuk, a második tétel.
példa
Az általunk használt névtelen változó a fejét, és a megjelenő lista után a vonalat, ha már csak a második tétel:
?- [Elefánt, ló, szamár, a kutya] = [_ X | _].
X = ló
igen
Tekintsük több listát kezelési eljárásokat. Megjegyezzük, hogy mind használat rekurzió, ahol a terminál (alap) jogok vannak meghatározva egy üres lista.
példa
Írjunk egy predikátumot, hogy kiszámolja az összeg minden eleme számok listáját.
summa_spiska ([], 0).
summa_spiska ([H | T], S): - szám (H), summa_spiska (T, S1),
S S1 + H.
példa
Predikátum hely / 3 akkor sikeres, ha a harmadik argumentum lista kapott inszerciója az első argumentum tetszőleges helyzetben a listán, amely a második argumentum.
helye (E, L, [E | L]).
tér (E, [H | L], [H | Y]): - Location (E, L, Y).
Nézzük az eredményeket olyan lekérdezéseket, használja ezt a feltételnek.
?- helye (1, [2,3], X).
X = [1, 2, 3];
X = [2, 1, 3];
X = [2, 3, 1];
nincs
?- helye (1, L, [2,1,3]).
L = [2, 3];
nincs
?- helyzetben (X, [2,3], [2,1,3]).
X = 1;
nincs
példa
Állítmány permutációs / 2 kimenet listák kapott permutációja elemei az első érv.
átrendeződéssel ([] []).
átrendeződés ([H | L], Z): - egy permutációs (L, Y), hely (H, Y, Z).
Használati példa:
?- átrendeződés ([a, b, c], X).
X = [a, b, c];
X = [b, a, c];
X = [b, c, a];
X = [a, c, b];
X = [c, a, b];
X = [c, b, a];
nincs
Végül, adunk egy szabály nyomtatni egy listát az összes lehetséges permutációk:
vse_perestanovki (L): - egy permutációja (L, R), write (R), nl, nem.
Az első részcél állítmány kiszámítja a következő permutáció, kinyomtatja, és megy az utolsó al - nem. Ez az al-cél mindig sikertelen, ami Prolog vissza az elejére szabályok és továbbra is keresni a megoldásokat. Munka eljárásokat kell kitölteni, ha az összes permutációt már kimerült:
?- vse_perestanovki ([ „márki”, „a szép szemek”
| 'Ígérd halála love']).
[Marquise, szép szemek, ígérem halála szeretet]
[A kedves szemet, Marquise, ígérd halál szeretetből]
[A szép szemek, ígérd halál szerelem, Marquis]
[Marquis, ígérd halál a szerelem, a gyönyörű szemét]
[Ígérd halál szerelem, Marquise, szép szemét]
[Ígérd halál a szerelem, szép szemek, Marquise]
nincs
példa
A staroyaponskom naptári 60 éves ciklusban elfogadták, amely öt 12 éves al-ciklus. Segédváz kijelölt nevek színek: zöld, piros, sárga, fehér és fekete. Az egyes al-ciklus az év volt a nevek az állatok: patkány, tehén, tigris, nyúl, sárkány, kígyó, ló, juh, majom, csirke, kutya és sertés. Például 1984-ben - az év elején a következő ciklusban - az úgynevezett zöld Patkány Évében.
Írjunk programot, amely, tekintettel a AD n kiírja a nevét staroyaponskom naptár. Úgy véljük, két esetben:
(1) n értéke nem kevesebb, mint 1984;
(2) az n értéke - bármely természetes szám.
Használjuk a beépített predikátum nth0 (index, lista, elem), hogy sikeres legyen, ha az elem a helyén van egy indexszámot kezdve 0. esetében (1) egy predikátum nam, abban az esetben a (2) az állítmány - nm.
színes (N, X): - N1 ((N-1984) mod 60) // 12
nth0 (N1, [a 'zöld'
„Vörös”, „sárga”
„Fehér”, „fekete”]
X).
állat (N, X): - N1 jelentése (N-1984) mod 12,
nth0 (N1,
[ 'Rat', 'tehén', 'tigris'
'Hare', 'Sárkány', 'kígyó'
„Ló”, „birka”, „majom”
'Csirke', 'kutya', a 'pig'],
X).
nam (N, [X, Y]): - szám (N), szín (N, X), állati (N, Y).
nm (N, X): - N> 1983 nam (N, X).
nm (N, X): - N

Storіnki, blizkі az zmіstom