Liste, un portal de cunoștințe, portal de cunoștințe, învățământ la distanță

Adăugați cunoștințele la moєї Bazi

Liste - una dintre cele mai frecvent utilizate structuri în Prolog. Când scrieți lista inclus între paranteze drepte, iar elementele listei sunt separate prin virgulă, de exemplu,
[Elephant, un cal, o maimuță, un câine]
Aceasta este o listă de patru atomi - un elefant, un cal, o maimuță, un câine.
Elementele listei pot fi orice Prolog, t. E. Atomii, numărul de variabile și termeni compuși, care permite, în special, de a face liste de liste. O listă goală este scris ca [].
Aici este o listă de probă cu o structură mai complicată:
[Elephant, [], X, strămoș (X, volum), [a, b, c], f (22)]
Primul element este listă non-gol se numește capul și restul listei se numește coada. În lista care constă dintr-un singur element al capului este singurul element, iar coada - lista goală. Simbol [H | T] este utilizat pentru a reprezenta lista cu un cap H și coada T. În cazul în care | plasate înainte de ultimul termen al listei, înseamnă că acest ultim termen definește o altă listă. Lista completa se întâmplă atunci când combinați acest lucru cu o secvență de sub-lista de elemente aranjate la caracteristici.
Exemplul următor 1 - capul listei și [2, 3, 4, 5] - coadă. Prologue va arăta acest lucru prin compararea listei de numere cu un eșantion format dintr-un cap și o coadă.
?- [1, 2, 3, 4, 5] = [Cap | Coada].
Șef = 1
Coada = [2, 3, 4, 5]
da
Aici cap și coadă - doar nume de variabile. Am putea folosi X și Y, sau orice alte nume variabile cu același succes. Rețineți că coada listei este întotdeauna o listă. Capul, la rândul său, are un element din listă, care este valabil pentru toate celelalte elemente situate în fața unei bare verticale. Acest lucru vă permite, să zicem, al doilea element.
exemplu
Noi folosim variabile anonime pentru cap și lista care apare după linia, dacă suntem doar al doilea element:
?- [Elephant, un cal, un măgar, un câine] = [_, X | _].
X = cal
da
Luați în considerare mai multe liste de proceduri de tratament. Rețineți că toate folosesc recursivitate, în care terminalul drepturi (de bază) sunt definite pentru o listă goală.
exemplu
Să scrie un predicat pentru a calcula suma tuturor elementelor unei liste de numere.
summa_spiska ([], 0).
summa_spiska ([H | T], S): - numărul (H), summa_spiska (T, S1),
S este S1 + H.
exemplu
Locul Predicat / 3 este de succes dacă al treilea argument este o listă obținută prin inserarea primului argument într-o poziție arbitrară în listă, care este al doilea argument.
Locul (E, L, [E | L]).
spațiu (E, [H | L], [H | Y]): - localizarea (E, L, Y).
Să ne uităm la rezultatele unor interogări care folosesc acest predicat.
?- loc (1, [2,3], X).
X = [1, 2, 3];
X = [2, 1, 3];
X = [2, 3, 1];
nu
?- loc (1, L, [2,1,3]).
L = [2, 3];
nu
?- poziția (X, [2,3], [2,1,3]).
X = 1;
nu
exemplu
Predicatul permutare / 2 liste de ieșiri obținute permutare a elementelor din primul lor argument.
rearanjare ([] []).
rearanjare ([H | L], Z): - o permutare (L, Y), locul (H, Y, Z).
Exemplu de utilizare:
?- rearanjare ([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];
nu
În cele din urmă, vom da o regulă pentru a imprima o listă cu toate permutări posibile:
vse_perestanovki (L): - o permutare (L, R), scrie (R), nl, nu.
Primul predicat sub-obiectiv calculeaza urmatoarea permutare, imprimă și merge la ultimul sub - nu. Acest sub-obiectiv este întotdeauna succes, care face Prolog înapoi la regulile de sus și continuă să caute soluții. Procedurile de lucru vor fi finalizate atunci când toate permutările au fost epuizate:
?- vse_perestanovki ([ 'Marquis', 'ochii frumoși'
| „Promite-mi moartea de dragoste“]).
[Marquise, ochii tăi minunat, îți promit moartea iubirii]
[Ochii tăi minunat, Marquise, promite-mi moartea din dragoste]
[Ochii tăi frumoși, promite-mi moartea de dragoste, Marquis]
[Marquis, promite-mi moartea de dragoste, ochii tăi frumoși]
[Promite-mi moartea de dragoste, Marquise, ochii minunat]
[Promite-mi moartea de dragoste, ochii minunat, Marquise]
nu
exemplu
În calendarul staroyaponskom a fost adoptat ciclu de 60 de ani, constând din cinci sub-cicluri de 12 ani. Numele Subcadru desemnate de culori: verde, roșu, galben, alb și negru. În cadrul fiecărui sub-ciclu al anului au fost numele de animale: de șobolan, de vaca, tigru, iepure, dragon, șarpe, cal, oaie, maimuță, pui, câine și de porc. De exemplu, în 1984 - anul de la începutul următorului ciclu - numit verde Anul Sobolanului.
Scrieți un program care, având în vedere numărul AD n imprimă numele său în calendarul staroyaponskom. Considerăm două cazuri:
(1) n valoare nu este mai mică decât 1984;
(2) valoarea n - orice număr natural.
Noi folosim built-in predicat nth0 (index, lista, elemente) pentru a avea succes, în cazul în care elementul este în loc cu un număr de index pornind de la 0. Pentru cazul (1), folosind un nam predicat, în cazul (2) predicatul - nm.
culoare (N, X): - N1 este ((N-1984) mod 60) // 12
nth0 (N1, [ 'verde'
'Red', 'galben'
„Alb“, „negru“]
X).
animal (N, X): - N1 este (N-1984) mod 12,
nth0 (N1,
[, 'Tigru' 'Rat', 'vaca'
'Hare', 'Dragon', 'șarpe'
„Calul“, „oi“, „maimuta“
, 'Câine' 'pui', 'porc'],
X).
nam (N, [X, Y]): - numărul (N), culoare (N, X), animale (N, Y).
nm (N, X): - N> 1983 nam (N, X).
nm (N, X): - N

Storіnki, blizkі pentru zmіstom