Una lingua può supportare qualcosa come "Riprova / Correggi"?

4

Mi stavo chiedendo se una lingua potrebbe supportare qualcosa come un blocco Riprova / Correggi?

La risposta a questa domanda è probabilmente la ragione per cui è una cattiva idea o equivalente a qualcos'altro, ma l'idea continua a venirmi in mente.

void F()
{
  try
  {
    G();
  }
  fix(WrongNumber wn, out int x)
  { 
    x = 1;
  }
}

void G()
{
  int x = 0;
  retry<int>
  {
    if(x != 1) throw new WrongNumber(x);
  }
}

Dopo che è stato eseguito il blocco di correzioni, il blocco di tentativi verrà eseguito di nuovo ...

    
posta Aaron Anodide 31.05.2012 - 00:16
fonte

1 risposta

3

Sì, una lingua potrebbe farlo.

Ci sono esempi nelle lingue esistenti. Common Lisp fornisce un sistema che consente a un gestore di eccezioni (condizione, in terminologia CL) di restituire il controllo al punto in cui è stata generata l'eccezione, passando informazioni aggiuntive su come deve essere gestita la condizione.

Una buona descrizione di ciò è disponibile nel libro Practical Common Lisp, 19 . Oltre la gestione delle eccezioni: condizioni e riavvii

Come altri commentatori hanno menzionato, il sistema generale continuation di Scheme potrebbe essere usato per implementare questo, e Eiffel fornisce funzionalità simili .

Grazie a @ 9000 e @delnan per aver richiamato Eiffel e chiamato / cc nei commenti sulla domanda

    
risposta data 31.05.2012 - 00:54
fonte

Leggi altre domande sui tag