Emacs – 排序 – 副作用修改初始列表的有用性

Emacs – 排序 – 副作用修改初始列表的有用性

函数 的副作用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

该函数sort假定初始列表是一次性的,并且它使该列表处于不可用状态。以下是一种解决方法,可使初始列表不受损害:

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

相关内容