Classical FP problem in python : Hamming problem

Nick Craig-Wood nick at
Thu Jan 27 04:30:01 EST 2005

Francis Girard <francis.girard at> wrote:
>  Thank you Nick and Steven for the idea of a more generic imerge.

You are welcome :-)  [It came to me while walking the children to school!]

>  class IteratorDeiterator:
>    def __init__(self, iterator):
>      self._iterator = iterator.__iter__()
>      self._firstVal = None ## Avoid consuming if not requested from outside
>                            ## Works only if iterator itself can't return None

You can use a sentinel here if you want to avoid the "can't return
None" limitation.  For a sentinel you need an object your iterator
couldn't possibly return.  You can make one up, eg

       self._sentinel = object()
       self._firstVal = self._sentinel

Or you could use self (but I'm not 100% sure that your recursive
functions wouldn't return it!)

>    def __iter__(self): return self
>    def next(self):
>      valReturn = self._firstVal
>      if valReturn is None:

       if valReturn is self._sentinel:

>        valReturn =
>      self._firstVal = None

       self._firstVal = self._sentinel


[snip more code]

Thanks for some more examples of fp-style code.  I find it hard to get
my head round so its been good exercise!
Nick Craig-Wood <nick at> --

More information about the Python-list mailing list