Making a function dynamically define another conditional function...
- To: mathgroup at smc.vnet.net
- Subject: [mg21733] Making a function dynamically define another conditional function...
- From: Paul Howland <paul.howland at nc3a.nato.int>
- Date: Wed, 26 Jan 2000 03:45:34 -0500 (EST)
- Organization: NATO C3 Agency
- Sender: owner-wri-mathgroup at wolfram.com
How can I make a function dynamically define a conditional function? Given a list of arguments {{a,A}, {b,B}, ...} I want to write a function that will take these arguments, and generate a new function, f say, which is defined as (for example): f[x_] := x+a /; x==A f[x_] := x+b /; x==B etc. So, the obvious solution is to define a function as follows: In[1] := TestFn[data_List] := Module[{args}, ClearAll[f]; Do[ args = data[[i]]; f[x_] = x + args[[1]] /; x==args[[2]], {i, Length[data]} ]] and call it using something like TestFn[{{1,2},{3,4},{5,6}}]. But this doesn't work (see attached notebook) as it appears that Mathematica does not evaluate any part of the condition at the time of definition, so args[[2]] remains unevaluated. As a consequence, the resulting function definition is not properly defined. So, the obvious solution to this is to wrap Evaluate[] around the condition (i.e. define the function as f[x_] = x + args[[1]] /; Evaluate[x == args[[2]]]. And this appears to work. If you do ?f, then you see a function comprising a number of conditional definitions. However, if you come to use the function, then it appears that Mathematica does not perform the condition test that appears in the definition! It simply uses the first definition it finds. What is going on?! How can I make this work? I attach a notebook with example code. [Contact Paul to get this notebook - Moderator] Many thanks for any help. Paul
- Follow-Ups:
- Re: Making a function dynamically define another conditional function...
- From: Hartmut Wolf <hwolf@debis.com>
- Re: Making a function dynamically define another conditional function...