Operatore di cortocircuito su entrambi i lati. Qualunque arte precedente?

0

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:

  1. Inizia a valutare entrambi gli argomenti
  2. Una volta completati, verifica se l'altro è ancora necessario
  3. 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.

    
posta Jon Chesterfield 13.09.2017 - 01:07
fonte

1 risposta

6

Sì, qualcosa da qualche parte probabilmente lo ha fatto, ma ... perché? Voglio dire, quanto spesso hai due o più predicati che

1) prenditi il tempo necessario per eseguirli in parallelo, e il sovraccarico vale la pena

e

2) può essere interrotto abbastanza rapidamente da renderlo opportuno fermarli prima

e

3) non preoccuparti di quali effetti collaterali vengono eseguiti, se presenti.

    
risposta data 13.09.2017 - 02:36
fonte

Leggi altre domande sui tag