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.