1

Есть ли полезность побочного эффекта функции sort , которая изменяет начальный список? Измененный список отличается от результата sort:

(let* (
    (initial-list '(3 2 4 1))
    (sorted-list (sort initial-list '<)))
  (cons initial-list (list sorted-list)))

Не лучше ли для функции sort внутренне использовать что-то похожее на copy-list чтобы исходный список не изменялся?


РЕДАКТИРОВАТЬ: Поскольку сообщество, которое отслеживает тег Emacs на superuser.com , выразило нежелание отвечать на этот вопрос (например, проголосовав, чтобы закрыть его), я создал новый отчет об ошибке Emacs по этой проблеме:

http://debbugs.gnu.org/cgi/bugreport.cgi?bug=18837

1 ответ1

1

Функция sort предполагает, что исходный список является одноразовым, и оставляет указанный список в непригодном для использования состоянии. Ниже приведен обходной путь, который оставляет начальный список без изменений:

(defun lawlist-sort (seq predicate)
  (let ((disposable-list (copy-list seq)))
    (sort disposable-list predicate)))

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .