답변:
#zck가 언급 한 것은 한 가지 차이점입니다. 그 유일한 차이점이라면하지만 당신에 대해 질문을 할 수 cl-pushnew와 add-to-list.
또 다른 중요한 차이점 add-to-list은 함수입니다. 즉, 모든 인수, 특히 첫 번째 인수를 평가합니다. push매크로 (있는 그대로 cl-pushnew)-두 번째 인수를 평가하지 않습니다. 대신 일반화 된 장소로 해석합니다.
예를 들어, 두 번째 인수가 기호이면 변수로 간주되고 첫 번째 인수의 값은 해당 기호의 값에 변수로 간주되며 변수는 새로운 단점으로 설정됩니다.
doc 문자열 add-to-list은 다음 과 같이 말합니다.
This is handy to add some elements to configuration variables,
but please do not abuse it in Elisp code, where you are usually
better off using `push' or `cl-pushnew'.
add-to-list can't use lexical var ...; use push or cl-pushnew
(push (5 6) my-list)여전히 오류가 발생합니다- 5함수가 아닙니다. 이 add-to-list행동 과 어떻게 다른 가요?
(5 6)을 변수 (값) 로 푸시하려면 목록 my-list을 작성해야합니다 (5 6). 이를 수행하는 한 가지 방법은 사용하는 것입니다 '(5 6). 다른 하나는 사용하는 것 (list 5 6)입니다. push인수를 평가합니다.
push는 변수와 같은 장소입니다. 첫 번째 인수는 해당 변수의 값에 따라 평가되며 변수는 새로운 단점으로 설정됩니다. add-to-list값이 업데이트되는 변수를 생성하기 위해 첫 번째 인수를 평가합니다. push업데이트 할 변수 인 두 번째 인수를 평가하지 않습니다. 인수 순서는 둘 사이에서 반대로됩니다.
로부터 이맥스 문서 , 또는 C-h f push:
매크로 : 푸시 요소 목록 이름
이 매크로는 car가 element이고 cdr이 listname으로 지정된 목록 인 새 목록을 작성하고 해당 목록을 listname에 저장합니다.
같은 페이지에서 또는 C-h f add-to-list:
기능 : 목록에 추가 기호 요소 및 선택적 추가 비교 -fn
이 함수는 element가 아직 해당 값의 멤버가 아닌 경우 element를 이전 값으로 구성하여 변수 기호를 설정합니다.
따라서 add-to-list요소가없는 경우에만 푸시합니다.
cl-pushnew처럼 동작 add-to-list합니다.
add-to-list하여 코드를을 사용 하여 코드 로 변환하는 데 어려움을 겪고cl-pushnew있었고이 블로그 게시물이 상당히 밝아졌습니다. yoo2080.wordpress.com/2013/09/11/…