다음 코드를 Emacs에서 평가할 때 x의 최종 값은 (2 3)이됩니다. 나는 (1 2 3)을 기대한다. 내가 뭘 놓치고 있니?Elisp : setq 및 sort의 효과를 파악할 수 없습니다.
(setq x '(2 1 3))
(sort x '<)
x
다음 코드를 Emacs에서 평가할 때 x의 최종 값은 (2 3)이됩니다. 나는 (1 2 3)을 기대한다. 내가 뭘 놓치고 있니?Elisp : setq 및 sort의 효과를 파악할 수 없습니다.
(setq x '(2 1 3))
(sort x '<)
x
을 확인, 당신은 그것을 반환 정렬 된 목록 및 입력 목록 부작용에 의한 수정 것을 발견 할 것이다. 인수 목록에 정렬 된 결과가 포함되어 있다고는 말하지 않습니다. 정렬 알고리즘에 의해 어떻게 든 변형됩니다. 또는 곧 말하면 : sort
은 입니다. 파괴적 인입니다.
그래서, 당신은 sort
의 반환 값을/바인딩 할당 할 수 있습니다 :
elisp> (setq x '(2 1 3))
(2 1 3)
elisp> (setq x (sort x '<))
(1 2 3)
elisp> x
(1 2 3)
저는 elisp에 대해 많은 경험이 없지만 car 및 cdr을 사용하여 올바르게 작동합니다. 당신이 sort
의 설명서를 읽어 보면 http://www.gnu.org/software/emacs/elisp/html_node/Rearrangement.html#Rearrangement
을 내가 불분명 같아요. 나는 (마지막 x)을 의미하는 것이 아니라 x의 최종 가치를 의미한다. –
응답을 편집했습니다. –
또한 리터럴을 파괴적으로 수정하면 예상치 못한 결과가 발생할 수 있습니다. (예 : http://stackoverflow.com/questions/6865142/lisp-cons-and-number-number-difference/6866155#6866155, CL에 대해서는 있지만 Emacs-Lisp에도 적용됨) – danlei