McNuggets problem: Difference between revisions
Content added Content deleted
m (→List monad) |
(→Python List monad: (enumFromTo -> enumFromThenTo)) |
||
Line 835: | Line 835: | ||
Note that the innermost function wraps its results in a (potentially empty) list. The resulting list of lists, some empty, is then flattened by the concatenation component of '''bind'''. |
Note that the innermost function wraps its results in a (potentially empty) list. The resulting list of lists, some empty, is then flattened by the concatenation component of '''bind'''. |
||
<lang python>'''mcNuggets list monad''' |
|||
⚫ | |||
⚫ | |||
def main(): |
def main(): |
||
'''List monad equivalent of the list (or set) comprehension.''' |
'''List monad equivalent of the list (or set) comprehension.''' |
||
def size(n): |
def size(n): |
||
return |
return enumFromThenTo(0)(n)(100) |
||
mcNuggets = set( |
mcNuggets = set( |
||
bind(size(6))( |
bind(size(6))( |
||
lambda x: |
|||
bind(size( |
bind(size(9))( |
||
lambda y: |
|||
bind(size(20))( |
|||
lambda z: ( |
|||
lambda v=sum([x, y, z]): ( |
|||
⚫ | |||
[v] if 101 > v else [] |
|||
) |
|||
⚫ | |||
) |
) |
||
Line 885: | Line 891: | ||
list(range(m, 1 + n, next - m)) |
list(range(m, 1 + n, next - m)) |
||
) |
) |
||
# enumFromTo :: (Int, Int) -> [Int] |
|||
def enumFromTo(m): |
|||
'''Integer enumeration from m to n.''' |
|||
return lambda n: list(range(m, 1 + n)) |
|||