답변:
#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/…