Questions about InputField
- To: mathgroup at smc.vnet.net
- Subject: [mg80293] Questions about InputField
- From: Fred Simons <f.h.simons at tue.nl>
- Date: Thu, 16 Aug 2007 07:25:00 -0400 (EDT)
The following contains a highly simplified version of a problem I ran into using Inputfields. Here is a construction for displaying the updated values of two numbers n and m, and to enter values for m: Column[{Dynamic[n], InputField[Dynamic[m]]}] I want to use this column for controlling the following (infinite) loop: n = 100; m = 0; While[n > 0, n = n - m; m = 0] Having started this loop, the column shows the numbers 100 and 0. Now enter 8 in the input field. Since the pre-emptive link will be used, the evaluation of the loop will be interrupted and the assignment m=8 is done. Then the loop is resumed, so n gets the value 92 and m is reset to 0. Having done this, the column indeed shows the value 92 for n, but for m the value 8 is displayed. Aborting the loop and inspecting the value of m gives 0, so here we have a Dynamic[m] that does NOT show the updated value for m. It is very strange that we can force the updating of m by explicitly entering the default value for the second argument of Dynamic: Column[{Dynamic[n], InputField[Dynamic[m, (m = #) &]]}] Restart the loop and repeatedly enter not too large positive values for m. Then, on my Windows Visa system, sometimes the number will be subtracted, sometimes not. Though this looks buggish, it probably is not. We have to take into consideration that we do not know at which point the execution of the loop is interrupted. That it does make a difference can be seen from the following two examples. In the next two loops it is practically sure that the interrupt will happen during the Pause statement. So the first loop can be perfectly controlled and in the second loop nothing seems to happen: n = 100; m = 0; While[n > 0, Pause[0.1]; n = n - m; m = 0] n = 100; m = 0; While[n > 0, n = n - m; Pause[0.1]; m = 0] So I suppose that in the situations that no subtraction happened, the execution of the loop was interrupted just before the assignment m=0. Can someone explain why it is necessary to use the default value for the second argument in Dynamic, and find a better and safer way of controlling the loop, not using a Pause statement? Fred Simons Eindhoven University of Technology