2014-09-17 1 views
7

Раньше я использовал функцию «быть элементами» цикла для повторения последовательности неизвестного типа. Я только что узнал, что «быть элементами» не предоставляется в каждой реализации Common Lisp, и мне интересно, есть ли какой-либо чистый способ итерации по последовательности с использованием цикла. Лучшим решением, с которым я смог прийти, является принуждение последовательности к списку, а затем повторение этого.Как перебрать последовательность в Common Lisp с помощью цикла?

ответ

10

Нет, LOOP не предоставляет такую ​​функцию напрямую. Если ваша реализация LOOP расширяема (о чем и не говорится в стандарте), возможно, вы сможете реализовать такую ​​функцию.

LOOP имеет пункты для перебирать списки - for item in list - и условие для перебора вектора - for e across vector - обратите внимание, что строки являются также векторами, одномерными массивами. Но не оба вместе.

В противном случае используйте MAP или MAP-INTO для повторения последовательностей.

ITERATE макрос обеспечивает такую ​​функцию: for i in-sequence seq.

Смежные вопросы