# 1.a * / \ / \ + + / \ / \ 20 - 2 1 | 6 # 1.b (\ x y z . (x z) (y z)) (\x y . x) (\x y . x) = \z . ((\x y . x) z) ((\x y . x) z) = \z . (\y . z) (\y . z) = \z . z (\ x y z . (x z) (y z)) (\x y . x) (\ x y z . (x z) (y z)) = \z . ((\x y . x) z) ((\ x y z . (x z) (y z)) z) = \z . ((\x y . x) z) ((\ x y t . (x t) (y t)) z) = \z . (\y . z) (\y t . (z t) (y t)) = \z . z # 1.c Funkcija `h` izračuna (i) seznam zadnjih elementov vseh nepraznih seznamov danega seznama seznamov. # 1.d `h(X,Y)` pomeni (iii) `Y` je seznam prvih elementov vseh nepraznih seznamov seznama `X`. # 1.e Izraz ima tip (b) `(int × int → int × int) list`. # 2. { x ≤ y } c := y ; { x ≤ y, c = y } if z <= x then { x ≤ y, c = y, z ≤ x } a := z ; { x ≤ y, c = y, a ≤ x } b := x ; { b ≤ y, c = y, a ≤ b } { b ≤ c, a ≤ b } else { x ≤ y, c = y, z > x } a := x ; { a ≤ y, c = y, z > a } if z <= y then { a ≤ y, c = y, z > a, z ≤ y } b := z { a ≤ y, c = y, b > a, b ≤ y } { a ≤ c, a < b, b ≤ c } { a ≤ b, b ≤ c } else { a ≤ y, c = y, z > a, z > y } b := y ; { a ≤ b, c = b, z > a, z > b } { a ≤ b, z > a, z > b } c := z { a ≤ b, c > a, c > b } { a ≤ b, b ≤ c} end { a ≤ b, b ≤ c} end { a ≤ b ∧ b ≤ c }