Poprzednio używałem funkcji "będący elementami" pętli do iterowania po sekwencji nieznanego typu. Właśnie dowiedziałem się, że "bycie elementami" nie jest zapewnione w każdej implementacji Common Lisp i zastanawiam się, czy istnieje jakiś czysty sposób na powtórzenie sekwencji za pomocą pętli. Najlepszym rozwiązaniem, z jakim mogłem się zetknąć, jest przekonanie sekwencji do listy, a następnie jej powtórzenie.Jak powtórzyć sekwencję w Common Lisp z pętlą?
7
A
Odpowiedz
10
Nie, LOOP
nie zapewnia takiej funkcji bezpośrednio. Jeśli twoja implementacja LOOP
jest rozszerzalna (o czym standard również nic nie mówi), możesz być w stanie zaimplementować taką funkcję.
LOOP
ma klauzule iteracyjne nad listami - for item in list
- oraz klauzulę do iteracyjne nad vector - for e across vector
- pamiętać, że łańcuchy są również wektory, tablice jednowymiarowe. Ale nie razem.
W przeciwnym razie należy użyć MAP
lub MAP-INTO
do iteracji sekwencji.
Makro ITERATE
zapewnia taką funkcję: for i in-sequence seq
.