Questions about rules
- To: mathgroup at yoda.physics.unc.edu
- Subject: Questions about rules
- From: Jean-Paul Roy <roy at taloa.unice.fr>
- Date: Thu, 7 Jan 93 14:59:57 +0100
3 packages of questions to Mma gurus about RULES (version 2.1). A) I want my program to dynamically generate rules. Say that a global variable z has value 3 at some moment, and the function foo is undefined: z = 3; x = 10; ?foo Information :: symbol foo not found What then must my running *program* do to get after execution : ?foo foo[x_] := x + 1 /; x < 3 where the 3 stands for the value of z at the moment of the definition of foo. I want exactly *this*, not a more complicated form with Evaluate[z]. I tried many forms with DownValues, Hold, ... but couldn't get the desired result. B) I suppose it's the same problem if I want to generate a new rule like: bar[x_] := Which[x < 1, 3, x < 2, 6, True, 9] where 3 stands for z, 6 for 2z and 9 for 3z ? The 'True' may also cause problems. I'm trying in A) and B) to generate piecewise curves from interpolation points. Notice that z and x both have values when the rule is generated (this is normal for z but may cause problems for x, as I want to capture the value of z but not the value of x). Maybe am I trying to practise Lisp macros in Mma ? Apparently I didn't get the right way to do it. Anyway, being able to dynamically build rules is very important, and we should be able to do it *easily*... C) What am I missing here ? The variable n is unbound but declared Integer: n /: IntegerQ[n] = True; 1 + Sin[n Pi] /. Sin[k_Integer Pi]->0 (* unchanged *) 1 + Sin[n Pi] /. Sin[k_ Pi] -> 0 (* 0 but not always correct *) Replace[Sin[n Pi],Sin[n_ Pi] -> 0 /; IntegerQ[n]] (* obsolete warning, result 0 *) Replace[Sin[n Pi],Sin[k_ Pi] -> 0 /; IntegerQ[k]] (* obsolete warning, result Fail *) 1/Sqrt[x] /. Sqrt[y_]->2 (* unchanged *) 1/Sqrt[x] /. Sqrt[x]->2 (* unchanged but 1+Sqrt[x] /. Sqrt[x]->2 is correct, result 3 !!! *) *Please* explain me... Jean-Paul Roy Departement d'Informatique Faculte des Sciences de Nice [roy at taloa.unice.fr]