Hi, Would anyone be able to tell me why my function below is getting stuck in infinite recusion? Maybe I'm just tired and missing something obvious?
def replace_within_node(node,oldnode,newnode): if node is oldnode: return newnode else: for varname,value in node.__dict__.items(): node.__dict__[varname]=replace_within_node(value,oldnode,newnode) return node At the end of this email I pasted the whole text of the sample code in case it would help to see it in context or maybe step through it? -- Gregory Piñero Chief Innovation Officer Blended Technologies (www.blendedtechnologies.com) #This is the code that's causing my problem: #---------------------------------------------------------------------- import random import sys class Test_Class: pass class Node: def __init__(self): self.arg0=0 self.arg1=0 self.arg2=0 self.arg3=0 def snip(node): prob_of_returning_this_node=.4 if random.random()<=prob_of_returning_this_node: return node else: if hasattr(node,'__dict__') and len(node.__dict__)>0: return snip(random.choice(node.__dict__.values())) else: return node def replace_within_node(node,oldnode,newnode): if node is oldnode: return newnode else: if hasattr(node,'__dict__'): for varname,value in node.__dict__.items(): node.__dict__[varname]=replace_within_node(value,oldnode,newnode) return node def generate_random_program(currdepth,mindepth=2,maxdepth=4): node=Node() if currdepth==maxdepth: return node else: node=Node() for varname,value in node.__dict__.items(): node.__dict__[varname]=generate_random_program(currdepth+1,mindepth,maxdepth) return node def breed(father,mother): #want to take subtree from each input parameter and swap them. snip_from_mother=snip(mother.program) snip_from_father=snip(father.program) program_for_father=replace_within_node(father.program,snip_from_father,snip_from_mother) program_for_mother=replace_within_node(mother.program,snip_from_mother,snip_from_father) return program_for_father,program_for_mother if __name__=='__main__': dragons=[Test_Class() for i in range(10)] for dragon in dragons: dragon.program=generate_random_program(0) for i in range(100): breed(dragons[0],dragons[1]) -- http://mail.python.org/mailman/listinfo/python-list