; three list manipulation exercises
(define (split n xs)
(let loop ((n n) (xs xs) (zs '()))
(if (or (zero? n) (null? xs))
(values (reverse zs) xs)
(loop (- n 1) (cdr xs) (cons (car xs) zs)))))
(define xs '(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20))
(define (task1 xs) (filter even? xs))
(display (task1 xs)) (newline)
(define (task2 n xs)
(let loop ((xs xs) (k 1) (zs (list)))
(if (null? xs) (reverse zs)
(if (= k n) (loop (cdr xs) 1 zs)
(loop (cdr xs) (+ k 1) (cons (car xs) zs))))))
(display (task2 3 xs)) (newline)
(define (task3 xs)
(call-with-values
(lambda () (split (quotient (length xs) 2) xs))
(lambda (front back) (append back front))))
(display (task3 xs)) (newline)
OyB0aHJlZSBsaXN0IG1hbmlwdWxhdGlvbiBleGVyY2lzZXMKCihkZWZpbmUgKHNwbGl0IG4geHMpCiAgKGxldCBsb29wICgobiBuKSAoeHMgeHMpICh6cyAnKCkpKQogICAgKGlmIChvciAoemVybz8gbikgKG51bGw/IHhzKSkKICAgICAgICAodmFsdWVzIChyZXZlcnNlIHpzKSB4cykKICAgICAgICAobG9vcCAoLSBuIDEpIChjZHIgeHMpIChjb25zIChjYXIgeHMpIHpzKSkpKSkKCihkZWZpbmUgeHMgJygxIDIgMyA0IDUgNiA3IDggOSAxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNyAxOCAxOSAyMCkpCgooZGVmaW5lICh0YXNrMSB4cykgKGZpbHRlciBldmVuPyB4cykpCgooZGlzcGxheSAodGFzazEgeHMpKSAobmV3bGluZSkKCihkZWZpbmUgKHRhc2syIG4geHMpCiAgKGxldCBsb29wICgoeHMgeHMpIChrIDEpICh6cyAobGlzdCkpKQogICAgKGlmIChudWxsPyB4cykgKHJldmVyc2UgenMpCiAgICAgIChpZiAoPSBrIG4pIChsb29wIChjZHIgeHMpIDEgenMpCiAgICAgICAgKGxvb3AgKGNkciB4cykgKCsgayAxKSAoY29ucyAoY2FyIHhzKSB6cykpKSkpKQoKKGRpc3BsYXkgKHRhc2syIDMgeHMpKSAobmV3bGluZSkKCihkZWZpbmUgKHRhc2szIHhzKQogIChjYWxsLXdpdGgtdmFsdWVzCiAgICAobGFtYmRhICgpIChzcGxpdCAocXVvdGllbnQgKGxlbmd0aCB4cykgMikgeHMpKQogICAgKGxhbWJkYSAoZnJvbnQgYmFjaykgKGFwcGVuZCBiYWNrIGZyb250KSkpKQoKKGRpc3BsYXkgKHRhc2szIHhzKSkgKG5ld2xpbmUp