; three homework problems (define (sum-odd n) (if (zero? n) 0 (+ (sum-odd (- n 1)) n n -1))) (display (sum-odd 5)) (newline) (define (sum-odd-aux n sum) (if (zero? n) sum (sum-odd-aux (- n 1) (+ sum n n -1)))) (define (sum-odd n) (sum-odd-aux n 0)) (display (sum-odd 5)) (newline) (define (sum-odd n) (* n n)) (display (sum-odd 5)) (newline) (define (freq str) (let ((counts (make-vector 256 0))) (do ((i 0 (+ i 1))) ((= i (string-length str))) (let ((c (char->integer (string-ref str i)))) (vector-set! counts c (+ (vector-ref counts c) 1)))) (do ((i 0 (+ i 1))) ((= 256 i)) (when (positive? (vector-ref counts i)) (display (integer->char i)) (display #\tab) (display (vector-ref counts i)) (newline))))) (freq "hello") (define (uniq-c eql? xs) (if (null? xs) xs (let loop ((xs (cdr xs)) (prev (car xs)) (k 1) (result '())) (cond ((null? xs) (reverse (cons (cons prev k) result))) ((eql? (car xs) prev) (loop (cdr xs) prev (+ k 1) result)) (else (loop (cdr xs) (car xs) 1 (cons (cons prev k) result))))))) (define (freq str) (uniq-c char=? (sort (string->list str) charchar (+ (modulo (+ (char->integer c) n -65) 26) 65)))) (list->string (map rotate (string->list str)))) (display (caesar 5 "ATTACK AT DAWN")) (newline) (display (caesar -5 "FYYFHP FY IFBS")) (newline)