Cflp Laborator |
|
Facultatea de
Automatica şi Calculatoare
Departamentul de Calculatoare |
Home | Lucrarea 1 | Lucrarea 2 | Lucrarea 3 | Lucrarea 4 | Lucrarea 5 | Proiect |
Lucrarea 6 | Lucrarea 7 | Lucrarea 8 | Lucrarea 9 | Lucrarea 10 |
Lucrarea 9 | |||
|
Subiecte |
Matrici
Matricile se construiesc in LISP cu funcţia MAKE-ARRAY. Trebuie sa specificam numarul indicilor şi domeniul fiecaruia. Exemplul urmator construieşte o matrice cu doua dimensiuni:
(SETQ M (MAKE-ARRAY '(1024 1024))
Fiecare indice poate lua valori intre 0 şi 1023. Matricea returnata de MAKE-ARRAY am legat-o ca valoare a simbolului M pentru a o putea folosi in continuare.
Odata contruita o matrice putem atribui valori diferitelor locaţii. Exemplul urmator da valoarea 88 locaţiei din matrice corespunzatoare indicilor 314 şi 271:
(SETF (AREF M 314 271) 88)
In acest context AREF doar identifica o poziţie in matrice, al carei conţinut este modificat de catre SETF. Putem folosi doar AREF pentru a obţine valoarea unei locatii.
(AREF M 314 271) 88
Īn LISP locaţiile unei matrici pot contine nu doar numere ci expresii arbitrare. Doua locaţii diferite ale unei matrici pot contine expresii de tipuri diferite.
Funcţia ARRAY-DIMENSION returneaza domeniul unui indice: (ARRAY-DIMENSION M 0) 1024 (ARRAY-DIMENSION M 1) 1024
Ambii indici ai matricii M au valori naturale mai mici ca 1024. Funcţia ARRAY-DIMENSIONS returneaza domeniile tuturor indicilor intr-o lista:
(ARRAY-DIMENSIONS M) (1024 1024)
Probleme
1. Scrieţi o procedura PRINT-ARRAY care afiseaza o matrice de doua dimensiuni primita ca argument. Fiecare rand al matricii va fi afişaţ pe o linie noua. Folosiţi ARRAY-DIMENSION pentru a afla domeniul indicilor.
2. O alta modalitate de a reprezenta o matrice este ca lista de liste, fiecare sublista corespunzand unei dimensiuni. Scrieţi o procedura care transforma o matrice reprezentata ca lista de liste intr-o matrice standard LISP. Presupuneti ca toate sublistele au dimensiuni egale.
|