OCaml - inferenza tipo: cosa significa [x;y;z]?
Ciao a tutti, non riesco a capire un esercizio (o meglio la soluzione dell'esercizio).
Vorrei chiedere una mano a voi:
Come soluzione il prof pone
Cosa si intende con [x; y; z] ? e' una lista? non credo perchè la lista è composta da elementi omogenei. qua nella soluzione dice che sono:
Da cosa lo dovrei capire? Perchè?
Vecchia domanda, alcune cose le ho capite, quindi l'ho editata.
grazie mille
Vorrei chiedere una mano a voi:
fun f [x; y; z] -> (f x y), (f z);;
Come soluzione il prof pone
('a -> 'a-> 'b) -> 'a list -> b*('a->'b).
Cosa si intende con [x; y; z] ? e' una lista? non credo perchè la lista è composta da elementi omogenei. qua nella soluzione dice che sono:
('a -> 'a-> 'b)quindi, uno dei 3 è diverso.
Da cosa lo dovrei capire? Perchè?
Vecchia domanda, alcune cose le ho capite, quindi l'ho editata.
grazie mille
Risposte
Ok, penso di esserci arrivato:
Ho uan situazione del genre:
dove
Quindi riscrivo il mio scheletro della soluzione:
sicocme ho
Quindi riscrivo il mio scheletro della soluzione:
Ora siccome f z manca di un parametro, non posso mettere 'b ma posso scrivere che è di tipo: ('a -> 'b), ossia:
prende in input un parametro (quello mancante, dato che uno è proprio z) e mi manda in 'b.
Quindi riscrivo la soluzione:
Se ho sbagliato correggetemi.
fun f [x; y; z] -> (f x y), (f z);;
Ho uan situazione del genre:
_ -> _ -> _ * _
dove
[x; y; z]sono una lista => a' list.
Quindi riscrivo il mio scheletro della soluzione:
_ -> 'a list -> _ * _
sicocme ho
f x yallora f sara' di tipo ('a->'a->'b)
Quindi riscrivo il mio scheletro della soluzione:
('a->'a->'b) -> 'a list -> 'b * _
Ora siccome f z manca di un parametro, non posso mettere 'b ma posso scrivere che è di tipo: ('a -> 'b), ossia:
prende in input un parametro (quello mancante, dato che uno è proprio z) e mi manda in 'b.
Quindi riscrivo la soluzione:
('a->'a->'b) -> 'a list -> 'b * ('a -> 'b)
Se ho sbagliato correggetemi.
Direi che è corretto.