Come si fa a battute dal implementazione DrScheme di R5RS?
Domanda
Quando si utilizza DrScheme con R5RS, non v'è alcuna funzione di errore. Ho intenzione di scrivere il mio, ma non riesco a capire come fermare l'esecuzione del programma. Ho provato comandi come:
- (arresto)
- (uscita)
- (errore)
e nessuno ha funzionato. Come si fa a interrompere l'esecuzione del programma?
Soluzione
SLIB (biblioteca Scheme portatile) ha un'implementazione di ERRORE. Si potrebbe desiderare di uno guardare quella, o utilizzare SLIB nei vostri programmi.
Oltre a questo, un modo per fermare il programma è semplicemente quello di sollevare un errore diverso! Provare qualcosa di simile (grazie a Stephen Houben ):
(define (error reason . args)
(display "Error: ")
(display reason)
(for-each (lambda (arg)
(display " ")
(write arg))
args)
(newline)
(scheme-report-environment -1)) ;; we hope that this will signal an error
Mentre questo solleva un secondo errore (indipendente), sarà sicuramente fermare l'esecuzione del programma.
Altri suggerimenti
C'è un motivo è necessario utilizzare R5RS? Altre definizioni di lingua in DrScheme definiscono error
e exit
. Ad esempio, il (module ...)
lingua PLT definisce mzscheme
e <=>. Invocare <=> dalla riga di comando che si dà anche queste definizioni.
Nota: ho DrScheme 372, che è piuttosto vecchio. Le cose non dovrebbero aver cambiato troppo, però.
una soluzione brutta è quella di definire anomala per diventare un errore di runtime.
per esempio uno di questi dovrebbe fare il trucco
(define abort "the program was aborted")
(define abort 123)
(define abort #f)
qualsiasi chiamata per interrompere
(abort)
dovrebbe generare un errore di runtime, se siete fortunati anche mostrare la corda, il codice di errore o qualsiasi altra cosa che ti interessano.