[untitled]

    ; Boolean Operations in Lambda Calculus
    ; -------------------------------------

    ; Not:
    ; Think of not(a) as
    ; if a == true
    ;      return false
    ; else
    ;      return true
    ; end
    ; Thus in lc it would become:
    (define lc_not
        (lambda (x)
                ((x lc_false) lc_true)
        )
    )

    ; And(x,y):
    ; again, think of and as:
    ; if x == true
    ;      if b == true
    ;          return true
    ;      else
    ;           return false
    ;      end
    ; else
    ;      return false
    ; end

    (define lc_and
        (lambda (x)
                (lambda (y)
                        ((x ((y lc_true) lc_false)) lc_false)
                )
        )
    )

    ; Or(x,y):
    ; if x == true
    ;     return true
    ; else
    ;     if y == true
    ;         return true
    ;     else
    ;         return false
    ;     end
    ; end

    (define lc_or
        (lambda (x)
                (lambda (y)
                        ((x lc_true) ((y lc_true) lc_false))
                )
        )
    )

    ; Note, as opposed to the && and || operators in C or the "and" and "or"
    ; statements in Scheme, those ands and ors always evaluate both expressions.