2015-04-21 8 views
8

Ho letto in Google Common Lisp Style Guide (vedere l'ultima sezione) che c'è un errore nello standard Common Lisp rispetto a and come specificatore di tipo. Vale a dire, che non "corto circuito", o equivalentemente che ordine di valutazione non è garantito, contrariamente a quanto ipotizzato nel example:Uso di `satisfies` con` e` in Common Lisp

(and integer (satisfies evenp)) 

Tuttavia, guardando section 4.4 di CLTL2, è affermato che

Quando typep elabora uno specificatore di tipo and, verifica sempre ciascuno dei tipi di componenti in ordine da sinistra a destra e interrompe l'elaborazione non appena un componente dell'intersezione è stato trovato a cui l'oggetto in questione non appartiene.

E sezione spiega inoltre che questo è così, proprio per consentire satisfies da filtrare da un altro tipo, per evitare errori.

Posso presumere che si tratti di un errore in Google Style Guide o il comportamento è cambiato da CLtL2?

risposta

8

Ho avuto lo stesso problema alcuni anni fa.

Non ho trovato nulla in ANSI CL che supporterebbe un ordine o filtro. Ma non esiste anche il numero che discute un cambiamento. L'esempio che hai citato assume l'interpretazione di CLtL2.

Quindi ha senso presumere che un compilatore possa riordinare i tipi e che questo sia cambiato da CLtL2.