; seven-segment devices

(define (digits n . args)
  (let ((b (if (null? args) 10 (car args))))
    (let loop ((n n) (d '()))
      (if (zero? n) d
          (loop (quotient n b)
                (cons (modulo n b) d))))))

(define (digit . xs)
  (let loop ((xs xs) (sum 0))
    (if (null? xs) sum
      (loop (cdr xs) (+ sum (expt 2 (car xs)))))))

(display (digit 0 2 3 4 5 6))   (newline) ; 0
(display (digit 4 6))           (newline) ; 1
(display (digit 0 1 2 4 5))     (newline) ; 2
(display (digit 0 1 2 4 6))     (newline) ; 3
(display (digit 1 3 4 6))       (newline) ; 4
(display (digit 0 1 2 3 6))     (newline) ; 5
(display (digit 0 1 2 3 5 6))   (newline) ; 6
(display (digit 2 4 6))         (newline) ; 7
(display (digit 0 1 2 3 4 5 6)) (newline) ; 8
(display (digit 0 1 2 3 4 6))   (newline) ; 9

(define (bentley n)
  (let ((ds (vector 125 80 55 87 90 79 111 84 127 95)))
    (map (lambda (d) (vector-ref ds d)) (digits n))))

(display  (bentley 3141592654)) (newline)