Nuovo esercizio Ocaml
Salve. Superato il precedente esercizio me ne trovo un altro che mi da si o no problemi. Mi spiego meglio. Questo è il testo:
Si definisca la funzione nextlet che prende come argomento una lettera dell'alfabeto e restituisce la lettera successiva (si assuma che le lettere siano chiuse circolarmente).
La mia soluzione(senza errori da parte del compilatore) risulta:
# let nextlet x = if x='z' then 'a' else if x='Z' then 'A' else char_of_int (int_of_char x+1);;
val nextlet : char -> char =
Provandola funziona egregiamente, solo che funziona pure con i caratteri numero, cosa che il titolo escluderebbe. Perciò pensavo di dover aggiungere a questa funzione il controllo islower e isupper(definiti in precedenza, perchè non presenti in libreria), in modo che prima di agire controlli che sia un carattere lettera. è necessario questo mio passaggio? Questo perchè se aggiungo i comandi dati ottengo la seguente funzione e il seguente errore:
# let nextlet x = if islower x or isupper x then if x='z' then ('a') else if x='Z' then ('A') else char_of_int (int_of_char x+1);;
Characters 61-66:
let nextlet x = if islower x or isupper x then if x='z' then ('a') else if x='Z' then ('A') else char_of_int (int_of_char x+1);;
^^^
Error: This expression has type char but an expression was expected of type
unit
Perchè mi chiede un tipo unit? In particolar modo cosa si aspetta, visto che non è la prima volta che mi da questo errore con un costrutto if???? Grazie.
Si definisca la funzione nextlet che prende come argomento una lettera dell'alfabeto e restituisce la lettera successiva (si assuma che le lettere siano chiuse circolarmente).
La mia soluzione(senza errori da parte del compilatore) risulta:
# let nextlet x = if x='z' then 'a' else if x='Z' then 'A' else char_of_int (int_of_char x+1);;
val nextlet : char -> char =
Provandola funziona egregiamente, solo che funziona pure con i caratteri numero, cosa che il titolo escluderebbe. Perciò pensavo di dover aggiungere a questa funzione il controllo islower e isupper(definiti in precedenza, perchè non presenti in libreria), in modo che prima di agire controlli che sia un carattere lettera. è necessario questo mio passaggio? Questo perchè se aggiungo i comandi dati ottengo la seguente funzione e il seguente errore:
# let nextlet x = if islower x or isupper x then if x='z' then ('a') else if x='Z' then ('A') else char_of_int (int_of_char x+1);;
Characters 61-66:
let nextlet x = if islower x or isupper x then if x='z' then ('a') else if x='Z' then ('A') else char_of_int (int_of_char x+1);;
^^^
Error: This expression has type char but an expression was expected of type
unit
Perchè mi chiede un tipo unit? In particolar modo cosa si aspetta, visto che non è la prima volta che mi da questo errore con un costrutto if???? Grazie.
Risposte
Risolto. Grazie lo stesso!!!