Note the parenthesis surrounding the name of the function and its argument, not only its argument.

About car, you got it wrong. The function car returns the first element, not the tail of the list. What you want is cdr. And you need to use setf again, because cdr does not change its argument, it just returns the correct value:

Your approach to reversing a list is basically sound, but you are performing some unnecessary steps (and it would be better if it handled the case of an empty list).

The traditional Scheme way of defining a function that loops through a list and returns some result (such as the reversed list) is to define an iteration function which accepts one additional argument, the result to be returned. Each iteration through the list, the result gets updated based upon the first item in the list and then the iteration repeats with the remainder of the list..

And by having your reverse function handle an empty list (returning an empty list), your "last item removal" function becomes almost trivial. (And of course, you could just use the standard 'reverse' function instead.)