Sto scrivendo il mio primo programma nello schema. Vado abbastanza in profondità nella ricorsione perché fondamentalmente interpreto un programma per un semplice robot che può avere chiamate di procedure annidate.Modo standard per interrompere la ricorsione nello schema
Se trovo una violazione, devo interrompere l'interpretazione del programma e restituire l'ultimo stato valido.
L'ho risolto dichiarando una variabile globale (define illegalMoveFlag 0)
e quindi impostandola tramite set!
.
Funziona bene, ma credo che il mio tutor non piacerà (perché non è approccio funzionale immagino)
altro approccio che ho pensato è quello di aggiungere un parametro di errore per ogni funzione che io chiamo ricorsivamente nel programma. Non mi piace molto perché renderebbe il mio codice molto meno leggibile, ma immagino sia più "funzionale".
C'è forse una terza via a cui non ho pensato? E il mio approccio può essere giustificato in questo paradigma o fondamentalmente è un odore di codice?
La più bella risposta finora. Tuttavia non posso usare facilmente il primo metodo. Per essere più specifico uso qualcosa come (let * ((a (call-that-can-fail)) (b (other-call-that-can-fail a)))))) Se fallisce ho bisogno di stop b dall'esecuzione (so che può essere fatto via condizione ma sarà più brutto della mia attuale soluzione). Credo che userò la continuazione, renderà la mia funzione rientrante, che la mia soluzione con la variabile globale non lo è. –
Forse potresti usare una clausola '=>' in 'cond'? Vedi l'esempio sopra. – soegaard