# Let's Talk About Lambda Functions!

Miki Tebeka tebeka at cs.bgu.ac.il
Tue Aug 6 04:21:18 EDT 2002

```Hello Brit,

> So I know what lambda functions are, they're syntax and how they're used.
> However I'm not sure *why* one would use a lambda function. What's the
> advantage that they offer over a regular function?

Warning: I've bee a Scheme believer before I've converted to Python
:-)

Sometime lambda functions yeild more (IMO) elegant solution that is
One example is success/fail continuations.

---------
# Demonstrate success/fail continuation
class Tree:
'''Simple binary tree'''
def __init__(self, val, lson=None, rson=None):
self.val = val
self.lson = lson
self.rson = rson

def display(self, indent = 0):
print '  ' * indent, self.val
if self.lson:
self.lson.display(indent + 1)
if self.rson:
self.rson.display(indent + 1)

# We'd like to find the path we need to take in 'left', 'right' steps
# in order to get to a certain node in a tree

def path2(t, v):
'''Find path to v in t'''
return sfpath2(t, v, lambda v: v, lambda: 'Not Found') # Call with
initial continuations

def sfpath2(t, v, success, fail):
'''Success/Fail continuation solution'''
if not t:
return fail() # Can't find
if t.val == v: # Found right here
return success([])
# Recursive case, update success/fail continuations
return sfpath2(t.lson, v,
lambda v: success(['left'] + v),
lambda: sfpath2(t.rson, v, lambda v:
success(['right'] + v), fail))

# -- testing
t = Tree(1,
Tree(2,
Tree(3)),
Tree(4,
Tree(5)))

t.display()

print '* Path to 5'
print path2(t, 5)

print '* Path to 10'
print path2(t, 10)
---------

Miki

```