Lisp (programski jezik) — разлика између измена

Садржај обрисан Садржај додат
Ред 126:
Lisp lista je jednostruko povezana lista. Svaka ćelija liste se naziva <code>cons</code>(od -{CONStruct cell}- ili -{CONStruct list}-) i sastoji se od dva [[Pokazivač (programiranje)|pokazivača]], koji se nazivaju <code>car</code>(-{Contents of Address part of Register}-) i <code>cdr</code>(-{Contents of Decrement part of Register}-). Oni, redom, odgovaraju <code>elementu</code> i <code>pokazivaču</code> u [[Povezana lista|povezanoj listi]].
 
Ako uzmemo da nam dati <code>cons</code> bude glava povezane liste, onda njegov <code>car</code> pokazivač pokazuje na prvi element liste, a <code>cdr</code> pokazuje na ostatak liste. Iz tog razloga <code>car</code> i <code>cdr</code> funkcije imaju i naziv <code>prvi</code> i <code>ostatak</code> kada se govori o elementima koji su deo povezane liste.
Veoma se često koriste kod rekurzivno napisanih funkcija koje u svom prvom prolazu obrađuju samo jedan element, a zatim se sa cdr uzima ostatak liste koji se rekurzivno prosleđuje istoj funkciji da isti posao obavi i za sve druge elemente
 
Zbog toga što su <code>cons</code> i liste univerzalne u Lisp sistemima, česta je zabluda da su oni jedine strukture podataka u Lisp-u. U stvari, postoje i druge strukture podataka, poput vektora (nizova), heš tabeli...
Линија 193 ⟶ 194:
liste <code>foo</code> i <code>bar</code> su <code>(a b c)</code> i <code>(x b c)</code>, redom. Međutim, rep <code>(b c)</code> je ista struktura u obe liste. Nije kopija već <code>cons</code> ćelije koje pokazuju na b i c su na istoj memorijskoj lokaciji.
 
Međutim, ukoliko se, u nekom trenutku, zameni b ili c u <code>foo</code>, zameniće se i u <code>bar</code>, što je neočekivani rezultat. Ovo može biti izvor grešaka, pa su funkcije koje menjaju svoje argumente označene kao destruktivne, upravo iz ovog razloga.
 
=== Samoevaluirajući oblici i operator navođenja quote ===