<%= function fat(n) if n < 2 then return 1 else return n * fat(n-1) end end print(fat(5)) function pair(a, b) return function (f) return f(a, b) end end function first(a, b) return a end function second(a, b) return b end local p = pair(2, true) print(p(first)) print(p(second)) function l3(a, b, c) return function (f, z) return f(a, f(b, f(c, z))) end end function cons(x, l) return function (f, z) return f(x, l(f, z)) end end function empty(f, z) return z end function head(l, z) return l(function (a, b) return a end, z) end function tail(l) end local nums = l3(2,4,6) print(head(nums, 0)) local nums2 = cons(2, cons(4, cons(6, empty))) print(head(nums, 0)) print(nums2(function (a,b) return a + b end, 0)) print("foo" .. "bar" .. "baz")