A
andrea
Ho notato che i generatori anche se infiniti non si lamentano se usati
in modo potenzialmente "pericoloso".
Dato:
m = (sum(xrange(1,x)) for x in count(1))
10 in m -> True
ma se gli passo un valore che non c'è naturalmente loopa all'infinito
perché non ha modo di sapere se prima o poi troverà il numero.
Ora assumendo una sequenza non decrescente con questa funzioncina si può
effettivamente avere una "pigrizia" a là haskell.
--8<---------------cut here---------------start------------->8---
def in_inf(gen, el):
x = dropwhile(lambda x: x < el, gen)
if x.next() == el:
return True
else:
return False
--8<---------------cut here---------------end--------------->8---
Che dite può andare?
Magari si potrebbe passare la funzione di controllo come argomento per
generalizzarla.
Altri miglioramenti/utilizzi trasversali?
in modo potenzialmente "pericoloso".
Dato:
m = (sum(xrange(1,x)) for x in count(1))
10 in m -> True
ma se gli passo un valore che non c'è naturalmente loopa all'infinito
perché non ha modo di sapere se prima o poi troverà il numero.
Ora assumendo una sequenza non decrescente con questa funzioncina si può
effettivamente avere una "pigrizia" a là haskell.
--8<---------------cut here---------------start------------->8---
def in_inf(gen, el):
x = dropwhile(lambda x: x < el, gen)
if x.next() == el:
return True
else:
return False
--8<---------------cut here---------------end--------------->8---
Che dite può andare?
Magari si potrebbe passare la funzione di controllo come argomento per
generalizzarla.
Altri miglioramenti/utilizzi trasversali?