; stock prices, fixed
(define xs '(100 80 70 65 95 120 150 75 95 100 110 120 90 80 85 90 64))
(define (buy-sell xs)
(let loop ((xs (cdr xs)) (lo (car xs)) (hi (car xs))
(min-lo (car xs)) (max-d 0))
(if (null? xs) (values lo hi max-d)
(let* ((min-lo (if (< (car xs) min-lo) (car xs) min-lo))
(d (- (car xs) min-lo)))
(if (< max-d d)
(loop (cdr xs) min-lo (car xs) min-lo d)
(loop (cdr xs) lo hi min-lo max-d))))))
(call-with-values
(lambda () (buy-sell xs))
(lambda (lo hi diff)
(display lo) (newline)
(display hi) (newline)
(display diff) (newline)))
OyBzdG9jayBwcmljZXMsIGZpeGVkCgooZGVmaW5lIHhzICcoMTAwIDgwIDcwIDY1IDk1IDEyMCAxNTAgNzUgOTUgMTAwIDExMCAxMjAgOTAgODAgODUgOTAgNjQpKQoKKGRlZmluZSAoYnV5LXNlbGwgeHMpCiAgKGxldCBsb29wICgoeHMgKGNkciB4cykpIChsbyAoY2FyIHhzKSkgKGhpIChjYXIgeHMpKQogICAgICAgICAgICAgKG1pbi1sbyAoY2FyIHhzKSkgKG1heC1kIDApKQogICAgKGlmIChudWxsPyB4cykgKHZhbHVlcyBsbyBoaSBtYXgtZCkKICAgICAgKGxldCogKChtaW4tbG8gKGlmICg8IChjYXIgeHMpIG1pbi1sbykgKGNhciB4cykgbWluLWxvKSkKICAgICAgICAgICAgIChkICgtIChjYXIgeHMpIG1pbi1sbykpKQogICAgICAgIChpZiAoPCBtYXgtZCBkKQogICAgICAgICAgKGxvb3AgKGNkciB4cykgbWluLWxvIChjYXIgeHMpIG1pbi1sbyBkKQogICAgICAgICAgKGxvb3AgKGNkciB4cykgbG8gaGkgbWluLWxvIG1heC1kKSkpKSkpCgooY2FsbC13aXRoLXZhbHVlcwogIChsYW1iZGEgKCkgKGJ1eS1zZWxsIHhzKSkKICAobGFtYmRhIChsbyBoaSBkaWZmKQogICAgKGRpc3BsYXkgbG8pIChuZXdsaW5lKQogICAgKGRpc3BsYXkgaGkpIChuZXdsaW5lKQogICAgKGRpc3BsYXkgZGlmZikgKG5ld2xpbmUpKSk=