[EMAIL PROTECTED] wrote: > While working on type expressions I am rather stuck for a > way to express recursive types. A simple example of this is a > singly-linked list of integers. In some languages you have compiler > syntax > which suspends evaluation so you can have recursive types. e.g. > > typedef Linked_List := int, Linked_List > > In LISP I would use a macro. > > I have tried using classes: > > class Linked_List(object): > typedef = (int, Linked_List) > > The closest I have got in Python is the following: > > Linked_List = (int, lambda: Linked_List) # linked list of int > > this is OK, because lambda makes closure which is not executed. However > it required the user of the type expression to call any lfunctions > found whilst traversing the tree. > > To make this a little more OO, I could use a constructor to wrap the > function: > > Linked_List = (int, recursive(lambda: Linked_List)) # linked > list of int > > but I am not satisfied with the "look". > > Any suggestions?
If you are after lazy evaluation: no - there is no chance python will grow that (Well, maybe there is some PEP out there - but if, it weould be for Py3K) The natural approach for your actual example though would be a generator. Which, when used in for .. in .. even looks natural to the eye: def squares(): c = 1 while True: yield c ** 2 for n in squares(): ... # do something fancy Diez -- http://mail.python.org/mailman/listinfo/python-list