Lisp (programski jezik) — разлика између измена
Садржај обрисан Садржај додат
м Разне исправке |
Нема описа измене |
||
Ред 111:
[[Датотека:Cons-cells.svg|thumb|right|300px|Prikaz liste (42 69 613)]]
Lisp lista je jednostruko povezana lista. Svaka ćelija liste se naziva
Ako uzmemo da nam dati
Zbog toga što su
==== Funkcije za rad sa listama ====
Ред 131:
</syntaxhighlight>
<syntaxhighlight lang=Lisp>
Линија 156 ⟶ 155:
==== Deljene strukture ====
Lisp liste, koje su jednostruko povezane, mogu da podele strukturu međusobno. To jest, dve liste mogu da imaju isti rep ili krajnji niz
<syntaxhighlight lang=Lisp>
Линија 163 ⟶ 162:
</syntaxhighlight>
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ć
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 ===
Линија 197 ⟶ 195:
U jednostavnoj implementaciji Lisp-a, ova struktura u vidu liste je direktno [[Интерпретатор (рачунарство)|interpretirana]] da pokrene program; funkcija je doslovno deo strukture liste koja prevedena od strane interpretatora pri izvršavanju. Većina Lisp sistema sadrži i kompajler. On prevodi strukturu liste na mašinski jezik ili [[Бајткод|bajtkod]] za izvršavanje. Ovaj kod može biti pokrenut jednako brzo kao i u C-u, na primer.
Neke implementacije Lisp-a imaju mehanizam <code>eval-when</code> koji omogućava kodu da bude prisutan za vreme kompilacije (kad zatreba makrou) ali nije prisutan u emitujućem modulu.<ref>[https://www.gnu.org/software/emacs/manual/html_node/cl/Time-of-Evaluation.html Time of Evaluation - Common Lisp Extensions]. Gnu.org. Retrieved on 2013-07-17.</ref>
|