2014-09-17 14 views
7

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ą?

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.