1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
(defun f (primes basis bound prod sum zero-ok)
  (declare (optimize (speed 3) (safety 0))
           (type integer bound prod sum))
  (loop repeat (if zero-ok 10 9)
    with p fixnum = (car primes) and prest = (cdr primes)
    and b integer = (car basis) and brest = (cdr basis)
    for newbd integer = (if zero-ok bound (floor bound p)) then (floor newbd p)
    for newprod integer = (if zero-ok prod (* prod p)) then (* newprod p)
    for newsum integer = (if zero-ok sum (+ sum b)) then (+ newsum b)
    while (and (plusp newbd) (<= newprod newsum)) nconc
    (if prest
        (f prest brest newbd newprod newsum t)
      (if (= newprod newsum) (list newsum) nil))))