Thank you for your quick answer, Minh. Although it would give the correct answer, it does not satisfy my wish to distinguish constants from parameters. In my engineering pblm, I have a set of several constants that I use in many statements, and I wish to keep them together nicely, and use them in only one keyword. In your solution, I would have to repeat them every time, and this is not convenient.
Any idea why Sage behaves as it does, and how to circument this strange behavior while keeping the "constant" idea ? Thanks PC On 25 juil, 21:43, Minh Nguyen <nguyenmi...@gmail.com> wrote: > Hi Pierre, > > > > On Sun, Jul 26, 2009 at 5:31 AM, pca<pierre.carbonne...@gmail.com> wrote: > > > Dear all, > > > I have been puzzled, and annoyed, by an unexpected side-effect. It > > can be demonstrated in the notebook by the following example. It > > models the speed as distance / time, then solve for the distance, then > > evaluate the distance with different arguments: > > > var('v d t') > > equation = v == d / t > > solution = solve(equation, d, solution_dict = True) > > d_ = solution[0][d]; print d_ #-> t*v > > constants= {v: 2} > > print d_(constants, t=3) #--> 6 > > # BEWARE: the previous call has the side effect that t=3 in later > > evaluation ! > > print d_(constants) #--> 6 : the side-effect is apparent here ! > > print d_ #--> t*v > > > I would expect d_(constants) to result in t*2, but instead its using a > > previous assignment of t to yield 6 ! > > > I'm using Sage for an engineering pblm, and I find it useful to > > separate constants from arguments. The side effect is thus annoying > > to me: is there any other way to evaluate a function with constants > > and arguments, without any side-effect with the arguments ? I'm new > > to this forum, so not sure if it has been raised before. Sorry if > > there is an easy answer. > > Is the following what you're looking for? > > ---------------------------------------------------------------------- > | Sage Version 4.1, Release Date: 2009-07-09 | > | Type notebook() for the GUI, and license() for information. | > ---------------------------------------------------------------------- > sage: var("v, d, t"); > sage: equation = v == d/t > sage: solution = solve(equation, d, solution_dict=True) > sage: solution > [{d: t*v}] > sage: sol_d = solution[0][d]; sol_d > t*v > sage: sol_d.substitute(v=2) > 2*t > sage: sol_d.substitute(t=3) > 3*v > sage: sol_d.substitute(t=3, v=2) > 6 > sage: sol_d > t*v > > -- > Regards > Minh Van Nguyen --~--~---------~--~----~------------~-------~--~----~ To post to this group, send email to sage-support@googlegroups.com To unsubscribe from this group, send email to sage-support-unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/sage-support URLs: http://www.sagemath.org -~----------~----~----~----~------~----~------~--~---