10.07.2015 Views

An Introduction to Functional Programming Through Lambda Calculus

An Introduction to Functional Programming Through Lambda Calculus

An Introduction to Functional Programming Through Lambda Calculus

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

- 45 -two ==(succ one) ==(λn.λs.((s false) n) one) =>λs.((s false) one) ==λs.((s false) λs.((s false) zero))and:three ==(succ two) ==(λn.λs.((s false) n) two) =>λs.((s false) two) ==λs.((s false) λs.((s false) one) ==λs.((s false) λs.((s false) λs.((s false) zero)))This representation enables the definition of a unary function iszero which returns true if its argument is zeroand false otherwise. Remember that a number is a function with an argument which may be used as a selec<strong>to</strong>r. Foran arbitrary number:λs.((s false) )if the argument is set <strong>to</strong> select_first then false will be selected:(λs.((s false) ) select_first) =>((select_first false) ) ==((λfirst.λsecond.first false) ) =>(λsecond.false ) =>falseIf zero, which is the identity function, is applied <strong>to</strong> select_first then select_first, which is the same astrue by definition, will be returned:(zero select_first) ==(λx.x select_first) =>select_first ==trueThis suggests using:def iszero = λn.(n select_first)

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!