fun equal_if_1 p x [] = false |equal_if_1 p [] y = false |equal_if_1 p [] [] = true |equal_if_1 p (a::x) (b::y) = p a b andalso equal_if_1 p x y; fun equal_if_2 p [] [] = true |equal_if_2 p x [] = false |equal_if_2 p [] y = false |equal_if_2 p (a::x) (b::y) = p a b andalso equal_if_2 p x y fun equal_if_3 p x y = (x=[] andalso y=[]) orelse (length x = length y) andalso (p (hd x) (hd y)) andalso (equal_if_3 p (tl x) (tl y)); fun equal_if_4 p x y = let fun equal_if p [] [] = true |equal_if p (a::x) (b::y) = p a b andalso equal_if p x y in (length x = length y) andalso equal_if p x y end; fun gt x y = x-y>0;