Lista

Lista w LOGO służy do przechowywania zbiorów danych oraz bloków kodu źródłowego programu.

Zbiór danych. Elementami listy mogą być dane dowolnego typu; różne typy mogą być przechowywane w jednej liście. Deklaracja stałej listy w kodzie programu ma postać: [a b c 1 2] (elementy oddzielone są spacjami; elementy traktowane są jako słowa; użycie [] i {} wewnątrz listy oznacza zagnieżdżone listy i tablice).
Rozmiar listy można modyfikować przez dodawanie i usuwanie elementów na początku i końcu listy (instrukcje: queue, dequeue, push, pop). Umożliwia to realizację struktur danych takich jak kolejka i stos. Preferowanym sposobem sekwencyjnego dostępu do elementów jest pętla foreach. Dostęp do skrajnych elementów umożliwiają instrukcje first i last. Instrukcja item i operator indeksowania (,) umożliwiają odczyt elementów na dowolnej pozycji, lecz są kosztowne obliczeniowo (w takich przypadkach preferowane jest użycie tablicy).

Lista jest zbiorem elementów tylko do odczytu. Wartości elementów listy nie mogą być modyfikowane (np. przy pomocy instrukcji setitem).

Przykład 1:

make "lis [a b [c]]
print :lis
queue :lis 123
print :lis
print dequeue :lis
print :lis
print :lis,2
print :lis,2,1

Rezultat wykonania:

[a b [c]]
[a b [c] 123]
a
[b [c] 123]
[c]
c

Blok kodu źródłowego. W przypadku instrukcji, których argumentem jest blok kodu programu (np. pętle, instrukcje warunkowe), treść kodu umieszczona jest wewnątrz listy. W przypadku użycia stałej listy w kodzie programu, blok kodu zostanie skompilowany przed uruchomieniem programu.

Przykład 2:

make "x 0
repeat 5 [make "x :x + repcount print :x]

Rezultat wykonania (w każdej iteracji obliczana jest suma liczb 1, ..., numer iteracji):

1
3
6
10
15

Możliwe jest także dynamiczne wygenerowanie kodu w trakcie działania programu. Blok kodu zostanie skompilowany przed pierwszym uruchomieniem (modyfikacja listy spowoduje kompilację przed kolejnym wykonaniem bloku).

Przykład 3:

make "fn [sqrt exp log]
foreach "n :fn (list "print :n 2)

Rezultat wykonania:

1.4142135623731
7.38905609893065
0.693147180559945

W powyższym przykładzie kolejne iteracje pętli foreach wykonują kod:

print sqrt 2
print exp 2
print log 2

Zobacz także:

Konstruktory listy:
list, sentence
Konwersje:
listtoarray, arraytolist
Operacje na zbiorach:
queue, dequeue, push, pop
first, butfirst, last, butlast
count, emptyp, listp

Spis treści