(1)
  foo []     = 1
  foo (x:xs) = if odd x then x * foo xs else foo xs 
(2)
  bar n = [ (x,y) | x<-[0..n], y<-[0..n], odd (x+y) ]

(1)
     (λx y z. x z (y z)) ((λx y. x) (λx y z. x z (y z))) (λx y. x)
   → (λy z. (λx y. x) (λx y z. x z (y z)) z (y z)) (λx y. x)
   → λz. (λx y. x) (λx y z. x z (y z)) z ((λx y. x) z)
   → λz. (λy x y z. x z (y z)) z ((λx y. x) z)
   → λz. (λx y z. x z (y z)) ((λx y. x) z)
   → λz y w. (λx y. x) z w (y w)
   → λz y w. (λy. z) w (y w)
   → λz y w. z (y w)
(2)
     (λx y z. x z (y z)) (λx y. x) (λx y. x)
   → (λy z. (λx y. x) z (y z)) (λx y. x)
   → λz. (λx y. x) z ((λx y. x) z)
   → λz. (λy. z) ((λx y. x) z)
   → λz. z

(1) [(1,1),(1,2),(2,3),(3,5),(5,8),(8,13)]
(2) [(1,2),(3,4)]