Nuovo esercizio Ocaml

Dadde11
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.

Risposte
Dadde11
Risolto. Grazie lo stesso!!!

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.