Как рекурсивно перевернуть список, используя только основные операции?

Мне было интересно, как перевернуть список, используя только основные операции, такие как cons, first, rest, empty? И т. Д.

Вспомогательные функции или аккумуляторы не допускаются, и функция принимает только один вход - список.

Мне сказали, что это возможно, хотя я не могу обернуть голову вокруг этого.

Это то, что я до сих пор концептуализировал. Я не знаю, как сформировать рекурсию для остальной части списка.

(defunc rev-list (x)
  (if (or (equal (len x) 0) (equal (len x) 1))
      x
      (cons (first (rev-list (rest x)))
            ???)))

По-видимому, можно сделать нечто подобное с функцией, которая меняет местами первый и последний из списка, хотя я также не до конца понимаю это. Вот код для этого:

(define swap-ends (x)
  (if (or (equal (len x) 0) (equal (len x) 1))
      x
      (cons (first (swap-ends (rest x))) 
            (swap-ends (cons (first x) 
                             (rest (swap-ends (rest x))))))))

Ответы на вопрос(3)

Ваш ответ на вопрос