Intersecting number wheels: Difference between revisions

Content added Content deleted
m (→‎Python: Functional composition: Tidying and pruning)
Line 1,118: Line 1,118:
digit found by recursive descent from a single
digit found by recursive descent from a single
click of the first wheel.'''
click of the first wheel.'''
def click(wheels, name):
def click(wheels):
wheel = wheels.get(name, ['?'])
def go(wheelName):
v = wheel[0]
wheel = wheels.get(wheelName, ['?'])
return (Tuple if isDigit(v) or '?' == v else curry(click))(
v = wheel[0]
return (Tuple if v.isdigit() or '?' == v else click)(
insertDict(name)(leftRotate(wheel))(wheels)
insertDict(wheelName)(leftRotate(wheel))(wheels)
)(v)
)(v)
return click(wheelMap, 'A')
return lambda name: go(name)
return click(wheelMap)('A')




Line 1,183: Line 1,185:
'''
'''
return lambda _: k
return lambda _: k


# curry :: ((a, b) -> c) -> a -> b -> c
def curry(f):
'''A curried function derived
from an uncurried function.
'''
return lambda x: lambda y: f(x, y)




Line 1,201: Line 1,195:
return dup
return dup
return lambda v: lambda dct: go(v, dct)
return lambda v: lambda dct: go(v, dct)


# isDigit :: Char -> Bool
def isDigit(c):
'''True if the character c is a digit.'''
return c.isdigit() and (1 == len(c))