Primes by Trial Division - XLISP

20 May 2018

XLISP began with only a superficial resemblance to LISP, over time steadily becoming more and more LISP-like. It doesn't seem like source compatibility between versions was ever a priority.

XLISP v1.1

(defun div? (n list / rc)
  (setq rc nil)
  (while (&& (! (null list)) (!= rc t))
      (if (% n (car list)) () ((setq rc t)))
      (setq list (cdr list)))
  rc)

(defun primes (n / primes)
  (setq count 3)
  (setq primes (list 2))
  (while (> n (length primes))
      (if (div? count primes) () ((setq primes (append primes (list count)))))
      (setq count (+ 1 count)))
  primes)

XLISP v1.4

Same as v1.6, with the following addition:

(setq T t)

XLISP v1.6

(defun divp (n list)
  (prog () (mapc #'(lambda (p)
              (cond ((zerop (rem n p)) (return T)))) list)
    (return nil)))

(defun primes (n)
  (prog (count primes)
    (setq count 3)
    (setq primes (list 2))
    NEXT (cond ((< (length primes) n)
                (cond ((divp count primes) nil)
                      (T (nconc primes (list count)))))
               (T (return primes)))
    (setq count (+ 1 count))
    (go NEXT)))

XLISP v2.0

(defun divp (n list)
  (mapc #'(lambda (p)
    (cond ((zerop (rem n p)) (return-from divp T)))) list)
  (return-from divp nil))

(defun primes (n)
  (setq count 3)
  (setq primes (list 2))
  (tagbody NEXT (cond ((< (length primes) n)
                       (cond ((divp count primes) nil)
                             (T (nconc primes (list count)))))
                      (T (return-from primes primes)))
                (setq count (+ 1 count))
                (go NEXT)))

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026

Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Primes Benchmark Source

Online Manuals

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

Primes Benchmark Results

Other LISPs

Cambridge LISP

Common LISP

Domain Lisp

Golden Common LISP

INTERLISP

Interlisp/65

LISP/80

Pearl LISP

Scheme R³

XLISP