Re: Programmatically creating functions of many

• To: mathgroup at smc.vnet.net
• Subject: [mg113670] Re: Programmatically creating functions of many
• From: Bob Hanlon <hanlonr at cox.net>
• Date: Sun, 7 Nov 2010 05:10:25 -0500 (EST)

```Use SetDelayed rather than Set.

Also, I recommend that instead of creating a list and applying Function to it, just use Function.

graph = GraphData[
Normal;

pairs = Position[graph, 1];

f := Function[{x},
And @@ Unequal @@@ Map[x[[#]] &, pairs, {2}]]

f[{x1, x2, x3, x4}]

x1 != x2 && x1 != x4 && x2 != x1 && x2 != x3 && x3 != x2 && x3 != x4 &&
x4 != x1 &&
x4 != x3

Note that this contains redundancies, e.g., both x1 != x2 and x2 != x1

Consequently, redefine pairs as

pairs = Union[Position[graph, 1],
SameTest -> (#1 == Reverse[#2] &)];

f[{x1, x2, x3, x4}]

x1 != x2 && x1 != x4 && x2 != x3 && x3 != x4

Bob Hanlon

---- Yaroslav Bulatov <yaroslavvb at gmail.com> wrote:

=============
Suppose I have a graph, and I'd like to create a function which checks
whether given assignment of nodes is a proper labeling -- ie, no two
adjacent nodes get the same number. One could do something like the
following, but that gives Part warnings. Is there a preferred
approach?

graph = GraphData[{"Grid", {2, 2}}, "AdjacencyMatrix"] // Normal;
f = Function @@ {{x}, And @@ (x[[First[#]]] != x[[Last[#]]] & /@
Position[graph, 1])}

This is actually a problem that I periodically come across. Part
approach causes warnings meanwhile something like Function @@
{Subscript[x,#]&/@Range[n], ...} doesn't work. What are typical ways
of generating multivariate functions automatically?

----
Yaroslav
http://stackoverflow.com/users/419116/yaroslav-bulatov

```

• Prev by Date: Re: can't get Mathematica 5.2 to evaluate anything
• Next by Date: Re: FFT in mathematica
• Previous by thread: Re: Tag List Protected error
• Next by thread: Extract size of resizable