Tipo funzioni Caml

Dadde11
Salve. Qualcuno saprebbe farmi un preciso schema di ragionamento per trovare il tipo di funzioni in Caml. Vorrei capire come ragionare in funzioni difficoltose come la seguente:

let f x y z = 1 + (z(x y) y);;

vi ringrazio!

Risposte
hamming_burst
vai di inferenza, da scope più interno a più esterno e tornando indietro appena hai un tipo primitivo valutato.

(x y)
x: a type -> b type
y: a type

(z(x y) y)
(x y) resituisce un b type
y lo hai già specializzeto in a type

z: b type -> a type -> c type

+: int -> int -> int
1: int

perciò ciò che restituisce (z(x y) y)
non può esser altro che un int, allora vai in ricorsione inversa e specializzi:

c = int

z: b -> a -> int

perciò
let f x y z = 1 + (z(x y) y);;
(a type -> b type) -> a type -> (b type -> a type -> int) -> int

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