title: "application: not a procedure" while generating prime numbers
body: <p>I am trying to output the first 100 prime numbers and keep getting the error:</p>
  
  <p>application: not a procedure;
  expected a procedure that can be applied to arguments
    given: (#)
    arguments...: [none]</p>
  
  <p>The error is shown in my take$ procedure here:</p>
  
  <pre><code>(if (or (= m 0) (null? st))
        '()
        (cons (car st) (take$ (- m 1) ((cdr st)))))))
  </code></pre>
  
  <p>Here it all my code:</p>
  
  <pre><code>(define int-builder$
      (lambda (x)
         (list x (lambda () (int-builder$ (+ 1 x ))))))
  
  (define take$
      (lambda (m st)
         (if (or (= m 0) (null? st))
             '()
             (cons (car st) (take$ (- m 1) ((cdr st)))))))
  
  (define filter-out-mults$
     (lambda (num  st)
       (cond
       (( = (remainder (car st) num) 0) 
           (filter-out-mults$ num ((cadr st))))
           (else 
              (list (car st) (lambda () (filter-out-mults$ num ((cadr st)))))))))
  
  (define sieve$
     (lambda (st)
       (list (car st)
            (lambda() (sieve$ (filter-out-mults$ (car st) ((cadr st))))))))
  
  (define stol$
      (lambda (n) 
        (take$ n (sieve$ (int-builder$ 2)))))
  </code></pre>
  
  <p>Thanks for any help you can provide.</p>