MathGroup Archive 2010

[Date Index] [Thread Index] [Author Index]

Search the Archive

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[
    {"Grid", {2, 2}}, "AdjacencyMatrix"] //
   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