       Re: Function changes in a program [CORRECTION]

• To: mathgroup at smc.vnet.net
• Subject: [mg92282] Re: [mg92262] Function changes in a program [CORRECTION]
• From: Bob Hanlon <hanlonr at cox.net>
• Date: Fri, 26 Sep 2008 06:24:51 -0400 (EDT)
• Reply-to: hanlonr at cox.net

```It is more efficient to use Union rather than Join in the definition of stateChanges

stateChanges[s1_List,
s2_List] := {Cases[
Union[s1,
s2] //.
{s___, HoldPattern[f_] :> f1_, m___,
HoldPattern[f_] :> f2_, e___} /;

f1 != f2 -> {s, {f, f1, f2}, m, e}, _List],
Complement[s2, s1, SameTest -> (First[#1] === First[#2] &)],
First /@
Complement[s1, s2, SameTest -> (First[#1] === First[#2] &)]}

Bob Hanlon

---- Bob Hanlon <hanlonr at cox.net> wrote:

=============
state[f_Symbol] :=
Flatten[#[f] & /@ {DownValues, UpValues}];

stateChanges[s1_List,
s2_List] := {Cases[
Join[s1, s2] //.
{s___, HoldPattern[f_] :> f1_, m___,
HoldPattern[f_] :> f2_, e___} /; f1 != f2 ->
{s, {f, f1, f2}, m,
e}, _List],
Complement[s2, s1, SameTest -> (First[#1] === First[#2] &)],
First /@ Complement[s1, s2, SameTest -> (First[#1] === First[#2] &)]}

Clear[f]

f[a] = 1;
f[b] = 2;
f[c] = 3;
f[d] = 4;

s1 = state[f];

f[a] = 1;
f[b] = 99;
f[c] =.;
f[d] = 7;
f[m] = 3;

s2 = state[f];

The changes, additions, and deletions are

stateChanges[s1, s2]

{{{HoldPattern[f[b]], 2, 99}, {HoldPattern[f[d]], 4, 7}}, {HoldPattern[f[m]] :>
3},
{HoldPattern[f[c]]}}

Bob Hanlon

---- Chris Degnen <tilting at windmills.freeserve.co.uk> wrote:

=============
Hi

Does anyone have a suggestion on how to
check for changes in environment function
variables in a program. I.e. starting with ...

initial environment

f[a]=1
f[b]=2

later environment

f[a]=1
f[b]=99
f[m]=3

I'd like to be able to determine that
f[b] had changed and f[m] was added.

--

Bob Hanlon

--

Bob Hanlon

```

• Prev by Date: Workbench complains about an invalid LinkObject number
• Next by Date: Re: Precision in Mathematica 6
• Previous by thread: Workbench complains about an invalid LinkObject number
• Next by thread: Redirecting input