Primes by Trial Division - Interlisp/65
29 March 2022
This version of Interlisp for Atari 6502 is surprisingly capable, but unfortunately omits several key functions the other versions rely on. MEMBER seems to work only on non-numeric atoms; no implementation of REMAINDER, MOD, LESSP, or MAPC. Mathematical operators are symbolic (+, *, /) except for subtraction (SUB).
As a consequence, this implementation is philosophically more similar to the C implementation, though the division test is implemented recursively, rather than iteratively.
Variant C
(DEFINEQ DIVP (LAMBDA (X LISZT) (PROG (Y) (SETQ Y (CAR LISZT)) (COND ((# Y) (PROG (I Z) (SETQ Z (/ X Y)) (SETQ I (INT Z)) (COND ((EQ Z I) (RETURN T)) (T (DIVP X (CDR LISZT)))))) (T NIL))))) (DEFINEQ PRIMES (LAMBDA (N) (PROG (COUNT PRIMES) (SETQ COUNT 3) (SETQ PRIMES (LIST 2)) NEXT (COND ((> N (LENGTH PRIMES)) (COND ((DIVP COUNT PRIMES) NIL) (T (NCONC PRIMES (LIST COUNT))))) (T (RETURN PRIMES))) (SETQ COUNT (+ COUNT 1)) (GO NEXT))))