; nth from the end
(define (nth-last n xs)
(list-ref (reverse xs) (- n 1)))
(display (nth-last 3 '(1 2 3 4 5 6 7 8 9))) (newline)
(define (nth-last n xs)
(list-ref xs (- (length xs) n)))
(display (nth-last 3 '(1 2 3 4 5 6 7 8 9))) (newline)
(define (nth-last n xs)
(let loop ((n n) (rabbit xs) (greyhound xs))
(if (positive? n) (loop (- n 1) (cdr rabbit) greyhound)
(if (pair? rabbit) (loop n (cdr rabbit) (cdr greyhound))
(car greyhound)))))
(display (nth-last 3 '(1 2 3 4 5 6 7 8 9))) (newline)
OyBudGggZnJvbSB0aGUgZW5kCgooZGVmaW5lIChudGgtbGFzdCBuIHhzKQogIChsaXN0LXJlZiAocmV2ZXJzZSB4cykgKC0gbiAxKSkpCgooZGlzcGxheSAobnRoLWxhc3QgMyAnKDEgMiAzIDQgNSA2IDcgOCA5KSkpIChuZXdsaW5lKQoKKGRlZmluZSAobnRoLWxhc3QgbiB4cykKICAobGlzdC1yZWYgeHMgKC0gKGxlbmd0aCB4cykgbikpKQoKKGRpc3BsYXkgKG50aC1sYXN0IDMgJygxIDIgMyA0IDUgNiA3IDggOSkpKSAobmV3bGluZSkKCihkZWZpbmUgKG50aC1sYXN0IG4geHMpCiAgKGxldCBsb29wICgobiBuKSAocmFiYml0IHhzKSAoZ3JleWhvdW5kIHhzKSkKICAgIChpZiAocG9zaXRpdmU/IG4pIChsb29wICgtIG4gMSkgKGNkciByYWJiaXQpIGdyZXlob3VuZCkKICAgICAgKGlmIChwYWlyPyByYWJiaXQpIChsb29wIG4gKGNkciByYWJiaXQpIChjZHIgZ3JleWhvdW5kKSkKICAgICAgICAoY2FyIGdyZXlob3VuZCkpKSkpCgooZGlzcGxheSAobnRoLWxhc3QgMyAnKDEgMiAzIDQgNSA2IDcgOCA5KSkpIChuZXdsaW5lKQ==