Una funzionalità simile si trova in macro LOOP di Common Lisp, described here by Peter Seibel:
... LOOP offre due parole chiave, all'inizio e alla fine , che introduce il codice da eseguire al di fuori del corpo principale del loop.
Dopo l'iniziale o la fine, queste clausole sono costituite da tutte le forme Lisp fino all'inizio della successiva clausola del ciclo o alla fine del ciclo. Tutte le forme iniziali sono riunite in un unico prologo, che viene eseguito una volta, immediatamente dopo l'inizializzazione di tutte le variabili del ciclo locale e prima del corpo del ciclo. Le forme finali sono analogamente combinate in un epilogo da eseguire dopo l'ultima iterazione del corpo del ciclo. Sia il codice del prologo che quello dell'epilogo possono riferirsi a variabili del ciclo locale.
Il prologo viene sempre eseguito, anche se il corpo del ciclo itera zero volte. Il ciclo può restituire senza eseguire l'epilogo se si verifica una delle seguenti situazioni:
- Una clausola di ritorno viene eseguita.
- RETURN, ritorno DA, o altro trasferimento del costrutto di controllo è chiamato da all'interno di un modulo Lisp all'interno del corpo ...
Ad esempio, parte di un campione pitone trovato nella domanda collegata:
for v in known_variables:
if self.bindings[v] is cell:
return v
else:
raise CannotSimplify
potrebbe essere simile a questa:
(loop for v in known-variables
when (eq (gethash v (slot-value self bindings)) cell)
do (return v)
finally (signal cannot-simplify))
Un'altra osservazione:
Anche il sistema di condizioni del Common Lisp è unico. Qualcuno, una volta, ha chiesto da dove proviene e ha puntato su Kent Pitman's paper, dove dice di averlo ricevuto da Maclisp. Allo stesso modo, la strana funzione FORMAT di Common Lisp apparentemente proveniva da Multics tramite Dan Weinreb.
Il fil rouge è che le caratteristiche del linguaggio non tendono a seguire il linguaggio degli antenati che più ha ispirato questa lingua, ma sono prese da persone che le hanno amate in qualsiasi nuova lingua lavorino. Quindi, se vuoi scoprire la vera fonte di Python for
- else
, cercherò chi l'ha aggiunto e vedremo in che lingua hanno lavorato prima.
Il ciclo - altro costrutto è presente da almeno python 0.9.1 (è presente nel file di grammatica). – Seth
Grazie mille. Appena controllato è menzionato anche nel tutorial. Python 0.9.0 fu la prima versione (febbraio 1991), e Python 0.9.1 (febbraio 1991) seguì da vicino "solo micro modifiche" (http://svn.python.org/view/*checkout*/python/trunk/Misc/HISTORY). – Aristide
L'utilizzo di * else * dopo * try * è correlato e allo stesso modo utile. (Vedi questo [esempio semplice] (http://stackoverflow.com/questions/1744070/why-should-exceptions-be-used-conservatively/1744176#1744176).) –