Concretely, so you can play with things, I need to call
(((A process_prime 2) process_prime 3) process_prime 4) ... process_prime 27
multiples =: 4 : 'y * (1 + ( i.(>. x % y)))' NB. max multiples n
make_sieve =: 3 : '0 (0 1) } (y+1) $ 1'
next_prime =: prime_indices pick_prime ]
prime_indices =: I. @ [ NB. return indices in list which equal 1
pick_prime =: I. { [ NB. dyadic fork to lookup the
drop_le =: 4 : '(x > y) # x' NB. drop elements in list <= value
NB. A process_prime 2 - marks all multiples of 2 in A as non-prime
process_prime =: 4 : '0 (}: }. (((#x)-1) multiples y)) } x'
A =: make_sieve 27
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm