Function creation slows code >10X

*To*: mathgroup at smc.vnet.net*Subject*: [mg63397] Function creation slows code >10X*From*: pdickof at scf.sk.ca*Date*: Thu, 29 Dec 2005 02:57:28 -0500 (EST)*Sender*: owner-wri-mathgroup at wolfram.com

directResult = Union[Map[Apply[ tagTree[[##]][[1]] &, #] &, Position[ tagTree, _?(leafRuleQ[#] &)]]]; // AbsoluteTiming takes 1.3 seconds newLeafTags[tagTree_] := Union[Map[Apply[tagTree[[##]][[1]] &, #] &, Position[tagTree, \ _?(leafRuleQ[#] &)]]]; funcResult = newLeafTags[tagTree]; // AbsoluteTiming takes 20 seconds. even though funcResult===directResult returns True In another case, 8 lines which take 12 seconds as separate lines take >500 seconds when a function is declared with a module statement wrapped around them even though no local variables are declared in the module. Why is this happening and how can I avoid it??? I don't see why it should matter, but - tagTree is a large, complicated nested rule like (eg.) a->{b->c,d->{e->f},g->h}. - leafRuleQ returns True for g->h and False for d->{e->f}, and - newLeafTags returns {b,e,g} for the example