## λ calculus Example - Lists

Lists
and list operators are usually "built in"
with programming languages based on λ calculus
but they can be *defined* in λ calculus.
The following example shows a way to define
CONS, NIL, HD (head), TL (tail), and NULL.
(PRINT is a cheat because it is defined using the
system's built-in lists ('::'),
but it too could be defined in λ calculus.)

- Lists:-
let rec CONS = lambda h. lambda t. lambda f. f h t, NIL = lambda f. true, NULL = lambda L. L (lambda h. lambda t. false), HD = lambda L. L (lambda h. lambda t. h), TL = lambda L. L (lambda h. lambda t. t), PRINT = lambda L. if NULL L then '/' else (HD L)::(PRINT (TL L)) in let L = CONS 1 (CONS 2 (CONS 3 NIL)) {an e.g.} in PRINT( CONS (NULL NIL) {T} ( CONS (NULL L) {F} ( CONS (HD L) {1} ( CONS (HD (TL L)) {2} ( CONS (HD (TL (TL L))) {3} NIL))))) {/} {

**Define (Flat) Lists From Scratch.**}