2014-09-17 8 views
7

In precedenza avevo utilizzato la funzionalità "being the elements of" del ciclo per scorrere su una sequenza di un tipo sconosciuto. Ho appena scoperto che "essere gli elementi di" non è fornito in ogni implementazione di Common Lisp e mi chiedo se ci sia un modo pulito per iterare su una sequenza usando loop. La soluzione migliore che sono riuscito a ottenere è quella di forzare la sequenza in una lista e poi scorrere su quella.Come eseguire iterazioni su una sequenza in Common Lisp con loop?

risposta

10

No, LOOP non fornisce direttamente tale funzione. Se l'implementazione dello LOOP è estensibile (di cui lo standard non dice nulla), potresti essere in grado di implementare tale funzione.

LOOP ha clausole per iterare su liste - for item in list - e una clausola per iterare su un vettore - for e across vector - di notare che le stringhe sono anche vettori, matrici unidimensionali. Ma non entrambi insieme.

Altrimenti utilizzare MAP o MAP-INTO per iterare su sequenze.

La macro ITERATE fornisce questa funzionalità: for i in-sequence seq.