練習問題 P.59 末尾再帰のreverse

(defile (reverse lis)
  (define (reverse-rec lis a)
    (if (null? lis)
        a
        (reverse-rec (cdr lis) (cons (car lis) a))))
  (reverse-rec (cdr lis) (list (car lis))))


こういうイメージと思えば、そんなに難しくない

for (split //, $lis) {
    $a = $_ . $a;
}

しかし、末尾再帰でない方の reverse の定義が一人では書けん orz
イメージがつかめんなー