Primes by Trial Division - Forth

30 December 2021
HiSoft FORTH does not allow infinite DO, but does offer UNTIL. Some versions are case-sensitive.
Otherwise the same as standard FORTH.
FORTH-83
: cells      4 * ;
: #prime@    2+ cells + ;
: #prime     >R DUP R> #prime@ @ ;
: #primes    DUP 1 cells + @ ;
: #primes++  #primes 1+ OVER 1 cells + ! ;
: maxprimes  DUP @ ;
: notprime   DROP 0 ;
: divides?   MOD 0= ;
: initialize DUP >R HERE DUP R> 2+ cells ALLOT ROT SWAP ! 0 OVER 1 cells + ! ;
: isprime!   DUP . CR OVER #primes #prime@ ! #primes++ ;
: isprime?
  OVER #primes 0 DO
    i #prime 2 PICK SWAP divides?
      IF notprime LEAVE THEN
  LOOP ;
: primes
  DECIMAL initialize CR 2 isprime! 2 BEGIN
    1+ DUP >R isprime? IF isprime! ELSE DROP THEN
    maxprimes >R #primes R> = R> SWAP UNTIL ;