函数 的副作用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 错误报告:
答案1
该函数sort
假定初始列表是一次性的,并且它使该列表处于不可用状态。以下是一种解决方法,可使初始列表不受损害:
(defun lawlist-sort (seq predicate)
(let ((disposable-list (copy-list seq)))
(sort disposable-list predicate)))