Ho appena eseguito il debug di un problema che si è dimostrato essere "e" ha valutato entrambi gli argomenti prima di verificare se uno dei due era falso. Va bene, non tutte le lingue gestiscono x = (will_return_true() || loop_forever()) ? "win" : "lose"
in modalità cortocircuito.
C'è arte precedente su un equivalente simmetrico?
Interpretare x = (loop_forever() || will_return_true()) ? "win" : "lose"
con la stessa efficacia del metodo tradizionale.
Valutazione del cortocircuito su and
, or
è essenzialmente il flusso di controllo avvolto nella sintassi. Il flusso di controllo che sto cercando sarebbe pari a:
- Inizia a valutare entrambi gli argomenti
- Una volta completati, verifica se l'altro è ancora necessario
- Elimina l'altro e torna immediatamente quando possibile
Interessante sarebbe anche qualsiasi linguaggio che prenda questo approccio alla valutazione dell'argomento senza la sintassi sopra riportata. Sto taggando come programmazione funzionale perché quanto sopra non funzionerebbe bene con gli effetti collaterali, specialmente se non è deterministico quale branch completa per primo.
Non penso che questo sia equivalente al tracciamento dello stile prolog, ma probabilmente potrebbe essere persuaso altrimenti.