Vaje: izpeljava tipov
Za vsakega od naslednjih izrazov izpeljite njegov glavni tip, ali ugotovite, da ga nima. Nato preverite odgovor še v OCamlu.
Naloga
Izpeljite glavni tip izraza
fun x -> fun y -> x, y, y
Naloga
Izpeljite glavni tip izraza
fun f -> fun g -> f (g 42)
Naloga
Izpeljite glavni tip izraza
if 3 < 5 then fun x -> x else fun y -> y, y
Naloga
Izpeljite glavni tip rekurzivne funkcije
let rec f x = if x = 0 then 1 else x * f (x - 1)
Naloga
Izpeljite glavni tip funkcije map
:
let rec map f l =
match l with
| [] -> []
| x :: xs -> f x :: map f xs
Navodilo: uporabite pravilo za rekurzivne funkcije, ter pravila za sezname in match
:
prazen seznam
[]
ima tipα list
, kjer jeα
nov parametersestavljen seznam
e₁ :: e₂
:- izpeljemo tip
τ₁
izrazae₁
in dobimo enačbeE₁
- izpeljemo tip
τ₂
izrazae₂
in dobimo enačbeE₂
Tip
e₁ :: e₂
jeτ₁ list
, z enačbamiE₁
,E₂
inτ₂ = τ₁ list
.- izpeljemo tip
izraz
match e₁ with [] -> e₂ | x :: xs -> e₃
:- izpeljemo tip
τ₁
izrazae₁
in dobimo enačbeE₁
- izpeljemo tip
τ₂
izrazae₂
in dobimo enačbeE₂
- uvedemo nov parameter
α
, zabeležimox : α
inxs : α list
, izpeljemo tipτ₂
izrazae₂
in dobimo enačbeE₃
Tip
match e₁ with [] -> e₂ | x :: xs -> e₃
jeτ₂
z enačbamiE₁
,E₂
,E₃
,τ₁ = α list
inτ₂ = τ₃
.- izpeljemo tip
Последна промена: четврток, 5 мај 2022, 01:02