RosettaCodeData/Task/Increment-a-numerical-string/Python/increment-a-numerical-strin...

37 lines
855 B
Python

# Dropping or keeping any non-numerics in the string
# succString :: Bool -> String -> String
def succString(blnPruned):
def go(x):
try:
return [str(1 + (float(x) if '.' in x else int(x)))]
except ValueError:
return [] if blnPruned else [x]
return lambda s: ' '.join(concatMap(go)(s.split()))
# TEST ----------------------------------------------------
def main():
print(
'\n'.join(
[succString(bln)(
'41.0 pine martens in 1491 -1.5 mushrooms ≠ 136'
) for bln in [False, True]]
)
)
# GENERIC ---------------------------------------------------
# concatMap :: (a -> [b]) -> [a] -> [b]
def concatMap(f):
return lambda xs: (
[ys[0] for ys in [f(x) for x in xs] if ys]
)
# MAIN ---
if __name__ == '__main__':
main()