gen-acc.scm 704 B

1234567891011121314151617181920212223242526
  1. ;;; SPDX-License-Identifier: MIT
  2. ;;; SPDX-FileCopyrightText: 2020 Wolfgang Corcoran-Mathe
  3. (define (%make-bitvector-generator bvec ref-proc)
  4. (let ((len (bitvector-length bvec))
  5. (i 0))
  6. (lambda ()
  7. (if (= i len)
  8. (eof-object)
  9. (let ((r (ref-proc bvec i)))
  10. (set! i (+ i 1))
  11. r)))))
  12. (define (make-bitvector/int-generator bvec)
  13. (%make-bitvector-generator bvec bitvector-ref/int))
  14. (define (make-bitvector/bool-generator bvec)
  15. (%make-bitvector-generator bvec bitvector-ref/bool))
  16. (define (make-bitvector-accumulator)
  17. (let ((r '()))
  18. (lambda (x)
  19. (if (eof-object? x)
  20. (reverse-list->bitvector r)
  21. (set! r (cons x r))))))