OCaml - inferenza tipo: cosa significa [x;y;z]?

BoG3
Ciao a tutti, non riesco a capire un esercizio (o meglio la soluzione dell'esercizio).
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
BoG3
Ok, penso di esserci arrivato:
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 y
allora 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.

apatriarca
Direi che è corretto.

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