sekans yerine arrow (&&&) kullanirsak “target c in guess” kontrolunun tekrarini onluyoruz:
def iterate(f, x0):
yield x0
yield from iterate(f, f(x0))
def takewhilePlusOne(pred, xs):
for x in xs:
yield x
if not pred(x): break
def arrowAnd(f, g):
return lambda x: (f(x), g(x))
ask = lambda prompt, target: list(takewhilePlusOne(lambda g: arrowAnd((lambda hs_ts: print(list(map(lambda hs_ts: hs_ts[1] if hs_ts[0] else '_', zip(*hs_ts))))), (lambda hs_ts: not all(hs_ts[0])))((list(map(lambda c: c in g, target)), target))[1], iterate(lambda ii: ii + [input(prompt)], [])))
print(list(ask("bir harf girin: ", "ali ata bak")))