Name: Anonymous 2009-07-27 14:50
I wrote some actual programmes when you were down. Please don't leave me again.
(define omg-sine
(λ(string)
(let* ((duplicate (λ(string n) (let L ((accum "")
(n n))
(if (zero? n)
accum
(L (string-append accum string) (- n 1))))))
(next-tag (λ(last-height current-height)
(if (= last-height current-height)
empty
(string->list (duplicate (if (positive? (+ last-height current-height))
(if (> last-height current-height) "[/sup]" "[sup]")
(if (< last-height current-height) "[/sub]" "[sub]"))
(abs (- last-height current-height)))))))
(normalized-sine ((λ(n) (λ(x) (inexact->exact (round (* n (sin (/ (* x pi) n))))))) 10)))
(let L ((accum empty)
(list (string->list string))
(last-height 0)
(position 0))
(if (empty? list)
(list->string (append accum (next-tag last-height 0)))
(let ((current-height (normalized-sine position)))
(L (append accum (next-tag last-height current-height) (cons (car list) empty))
(cdr list)
current-height
(+ position 1))))))))