Hi, I think that for small lists there won't be significant difference, but for longer lists you would not like to create copies and sort them as that would both use up a lot of memory and processor resources.
I'd rather go with something like below, but notice, it does not consider sequences that have repeating elements as having ascending or descending order. Yet it is a simple `fix', I left it out on purpose, since, if you were doing this for a class, then you will have to put a little effort to make it work for all cases
(defun asc-or-desc (x)
(if (> (length x) 1)
(funcall
(lambda (y pred)
(every (lambda (z)
(when (funcall pred y z)
(setf y z))) (cdr x)))
(first x)
(if (> (first x) (second x)) '> '<)) t))
(asc-or-desc '(1 2 3 4)) ; T
(asc-or-desc '(4 3 2 1)) ; T
(asc-or-desc '(4 3 1 2)) ; NIL