Non so se dipende dall'implementazione. Solo nel caso è importante, sto usando Corman Lisp 3.0Che cos'è "Variabile non utilizzata G **** nella funzione anonima"?
Quando faccio qualcosa di simile:
(loop for v being the hash-values of *my-hash-table*
when (> v 1) sum v)
ottengo due avvertimenti:
;;; Warning: Unused variable G9063 in anonymous function
;;; Warning: Unused variable G9062 in anonymous function
Con il numero di G cambiare ogni tempo.
Il risultato è corretto però. Cosa vogliono dire? Perché appaiono? Suppongo che potrebbe esserci un qualche tipo di abuso di sintassi loop
, che porta a questi avvertimenti, ma non riesco a vederlo.
'(LET ((#: G9003 NIL) (V NIL) (#: G9000 WORD-COUNT) (#: G9002 NIL)) (WITH-HASH-TABLE-ITERATOR (#: G9001 #: G9000) (LET ((#: G9004 0)) (DICHIARARE (NUMERO NUMERO: G9004)) (BLOCCO NIL (LOOP :: LOOP-BODY NIL (NIL NIL (WHEN (NOT (MULTIPLE-VALUE-SETQ (#: G9003 #: G9002 V) (#: G9001))) (GO LOOP :: END-LOOP)) NIL) ((SE (> V 1) (SETQ #: G9004 (+ #: G9004 V)))) (NIL NIL (WHEN (NOT (MULTIPLE-VALUE-SETQ (#: G9003 #: G9002 V) (#: G9001))) (GO LOOP :: END-LOOP)) NIL) ((RETURN-FROM NIL #: G9004))))))) 'È difficile da leggere, ma suppongo che G9002 e G9003 siano ciò che sto cercando. Ha senso ora, grazie! – akalenuk
@akalenuk Per facilitare la lettura, si potrebbe provare '(pprint (macroexpand '(loop ...)))'. L'ho fatto con il codice che hai incollato e ho ottenuto: http://paste.lisp.org/display/138466 (Ho dovuto modificare alcuni dei simboli, ad esempio 'loop :: end-loop' in' loop \: \: end-loop' dato che SBCL non ha un pacchetto 'ciclo', ma è fondamentalmente lo stesso.) –