zenith@ensmp.fr (Steven Ericsson Zenith) (02/05/91)
Ah. Blush :-) This really will teach me to crow. Nick Carriero has
kindly pointed out my deficient knowledge of C. It turns out that the
program example I claimed deadlocks in it's Linda version - doesn't. My
sincere apologies Nick and Dave.
Nick says:
First: Consider line 07. For 'me' in {2,3} limit is.
(In C, assignment of a float to an int truncates the fractional part.)
Second: Look at the for loop 09. For 'me' in {2,3}, the conditional
fails, we skip the loop, returning 1. The tuples
("prime table", 2, 1)
("prime table", 3, 1)
result. These will allow further is_prime() evals to execute.
01 is_prime(me)
02 int me;
03 {
04 int i, limit, ok;
05 double sqrt();
06
07 limit = sqrt((double) me) + 1;
08
09 for (i = 2; i < limit; ++i) {
10 rd("primes", i, ? ok);
11 if (ok && (me%i == 0)) return 0;
12 }
13 return 1;
14 }
The bounds error is there---it in fact results from an editing error.
Steven
--
Steven Ericsson Zenith * Email: zenith@ensmp.fr * Fax:(1)64.69.47.09
| Francais:(1)64.69.47.08 | Office:(1)64.69.48.52
Center for Research in Computer Science - Centre de Recherche en Informatique
CRI - Ecole Nationale Superieure des Mines de Paris
35 rue Saint-Honore 77305 Fontainebleau France
"All see beauty as beauty only because they see ugliness" LaoTzu