ABC words: Difference between revisions

Content added Content deleted
Line 2,364: Line 2,364:
return None is not bind(
return None is not bind(
bind(
bind(
residue('a')('bc')(s)
residue('bc', 'a')(s)
)(
)(
residue('b')('c')
residue('c', 'b')
)
)
)(
)(
Line 2,373: Line 2,373:




# residue Char -> String -> String -> Maybe String
# residue (String, Char) -> String -> Maybe String
def residue(c):
def residue(cs, c):
'''Any characters remaining in s after c, unless
'''Any characters remaining in s after c, unless
c is preceded by excluded characters.
c is preceded by excluded characters.
'''
'''
def excluding(cs):
def go(s):
def go(s):
if s:
if s:
x = s[0]
x = s[0]
return None if x in cs else (
return None if x in cs else (
s[1:] if c == x else go(s[1:])
s[1:] if c == x else go(s[1:])
)
)
else:
else:
return None

return None
return go
return go
return excluding