; entropy (define (log2 x) (/ (log x) (log 2))) (define (entropy filename) (with-input-from-file filename (lambda () (let ((freqs (make-vector 256 0)) (ent 0.0)) (let loop ((c (read-char)) (len 0)) (if (not (eof-object? c)) (let ((i (char->integer c))) (vector-set! freqs i (+ (vector-ref freqs i) 1)) (loop (read-char) (+ len 1))) (do ((k 0 (+ k 1))) ((= k 256) (- ent)) (let ((freq (vector-ref freqs k))) (when (positive? freq) (let ((x (/ freq len))) (set! ent (+ ent (* x (log2 x)))))))))))))) (display (entropy "entropy.ss")) (newline)