Deferred Evaluation in Recursive Expressions?
Diez B. Roggisch
deets at nospam.web.de
Tue May 9 15:16:45 CEST 2006
birchb at ozemail.com.au 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
> 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
> 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
The natural approach for your actual example though would be a generator.
Which, when used in for .. in .. even looks natural to the eye:
c = 1
yield c ** 2
for n in squares():
... # do something fancy
More information about the Python-list