push — 리스트 앞에 요소 넣기
push — 리스트 앞에 요소 넣기
리스트를 스택처럼 쓰면서 맨 앞에 요소를 계속 쌓고 싶을 때, push만큼 자주 쓰는 매크로도 없어요. push는 매크로로, item을 place에 저장된 리스트 앞에 붙이고 결과를 돌려줘요.
시그니처
push item place => new-place-value
본문
인자와 값
item— 객체예요.place— place이고, 그 값은 어떤 객체여도 돼요.new-place-value— 리스트로,place의 새 값이에요.
설명
item을 place에 저장된 리스트 앞에 붙이고, 결과 리스트를 place에 저장한 뒤 그 리스트를 돌려줘요.
place의 부분 폼(subform) 평가에 대한 내용은 Section 5.1.1.1 (Evaluation of Subforms to Places)을 참고하세요.
예제
(setq llst '(nil)) => (NIL)
(push 1 (car llst)) => (1)
llst => ((1))
(push 1 (car llst)) => (1 1)
llst => ((1 1))
(setq x '(a (b c) d)) => (A (B C) D)
(push 5 (cadr x)) => (5 B C)
x => (A (5 B C) D)
Side Effects
place의 내용이 수정돼요.
Notes
(push item place)의 효과는 다음 코드와 같아요:
(setf place (cons item place))
다만 place의 부분 폼들은 한 번만 평가되고, item은 place보다 먼저 평가된다는 차이가 있어요.
더 알아보기
pop— 리스트 앞에서 빼기pushnew— 중복 없이 넣기- Section 5.1 (Generalized Reference) — 일반화된 참조