; 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)