push — 리스트 앞에 요소 넣기

push — 리스트 앞에 요소 넣기

리스트를 스택처럼 쓰면서 맨 앞에 요소를 계속 쌓고 싶을 때, push만큼 자주 쓰는 매크로도 없어요. push매크로로, item을 place에 저장된 리스트 앞에 붙이고 결과를 돌려줘요.

출처: PUSH - Common Lisp HyperSpec

시그니처

push item place => new-place-value

본문

인자와 값

  • item객체예요.
  • placeplace이고, 그 은 어떤 객체여도 돼요.
  • new-place-value리스트로, place의 새 이에요.

설명

itemplace에 저장된 리스트 앞에 붙이고, 결과 리스트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부분 폼들은 한 번만 평가되고, itemplace보다 먼저 평가된다는 차이가 있어요.

더 알아보기

  • pop — 리스트 앞에서 빼기
  • pushnew — 중복 없이 넣기
  • Section 5.1 (Generalized Reference) — 일반화된 참조