Listele

In aceasta sectiune vom discuta despre o structura de date foarte utila - lista. Am intalnit-o in treacat in sectiunea despre aleatorism cand am ales pentru redare o nota la intamplare dintr-o lista:

play choose([50, 55, 62])

In aceasta sectiune vom vedea cum putem folosi listele pentru a reprezenta acorduri si game. Mai intai sa ne amintim cum putem canta un acord. Retine ca in lipsa comenzii ‘sleep’, toate sunetele sunt redate in acelasi timp:

play 52
play 55
play 59

Sa vedem si alte moduri de a scrie aceste instructiuni.

Redarea unei liste

O varianta ar fi sa punem toate notele intr-o lista: [52, 55, 59]. Functia ‘play’ este suficient de desteapta sa stie cum sa redea o lista de note. Incearca:

play [52, 55, 59]

Oho, deja este mai placut de citit. Redarea unei liste de note nu te impiedica sa folosesti parametrii cu care esti obisnuit:

play [52, 55, 59], amp: 0.3

Desigur, poti sa folosesti si numele notelor in loc de numere MIDI:

play [:E3, :G3, :B3]

Cei dintre voi care au fost suficient de norocosi sa studieze teorie muzicala au recunoscut probabil acordul E Minor redat in octava a treia.

Accesul la o lista

O alta caracteristica utila a unei liste este posibilitatea de a extrage informatia din ea. Asta suna putin cam ciudat, dar nu este mai complicat decat ar fi daca cineva ti-ar cere sa deschizi o carte la pagina 23. In cazul listei ai intreba ce element este la indexul 23. Singurul lucru cu adevara ciudat este ca in programare indexul porneste de la 0, nu de la 1.

In cazul indexului unei liste nu numaram 1, 2, 3…, ci 0, 1, 2…

Sa analizam acest lucru mai in detaliu. Priveste lista aceasta:

[52, 55, 59]

Nu e nimic de speriat aici. Acum, spune care este al doilea element din lista. Desigur, este ‘55’. A fost usor. Sa vedem daca putem sa facem computerul sa ne raspunda:

puts [52, 55, 59][1]

OK, poate parea putin ciudat daca nu ai mai vazut asa ceva inainte. Dar ai incredere in mine, nu e chiar asa de greu. Exista trei parti in linia de mai sus: cuvantul ‘puts’, lista 52, 55, 59 si indexul nostru ‘[1]’. Mai intai spunem ‘puts’ care inseamna ca vrem ca Sonic Pi sa afiseze rezultatul in jurnal. Apoi, transmitem lista noastra si la final indexul care cere al doilea element. Indexul se trece incadrat de paranteze patrate, iar deoarece numaratoarea incepe de la ‘0’. indexul pentru cel de-al doilea element este ‘1’. Priveste:

# indexes:  0   1   2
           [52, 55, 59]

Incearca sa executi puts [52, 55, 59][1] si vei vedea ca in jurnal apare ‘55’. Schimba indexul din ‘1’ in alta valoare, incearca liste mai lungi si gandeste-te cum ai putea utiliza o lista data viitoare cand improvizezi. De exemplu, ce structuri muzicale pot fi reprezentate ca serii de numere…