pop — 리스트의 첫 요소를 꺼내기

pop — 리스트의 첫 요소를 꺼내기

스택처럼 쌓아 둔 리스트에서 맨 앞 요소 하나를 꺼내 쓰려면 pop을 써요. pop매크로로, place에 저장된 리스트의 car를 돌려주면서 동시에 place를 cdr로 바꿔치기해요. 꺼내는 것과 리스트를 줄이는 작업이 한 번에 일어나죠.

출처: POP - Common Lisp HyperSpec

시그니처

pop place => element

본문

인자와 값

  • placeplace이고, 그 리스트예요 (반드시는 아니지만 dotted listcircular list일 수도 있어요).
  • element객체로, place 내용물의 car예요.

설명

place을 읽어서, 꺼내온 리스트car를 기억하고, 그 리스트cdrplace에 다시 쓴 다음, 처음 꺼내온 리스트car내놓아요.

place부분 폼(subform) 평가에 대한 내용은 Section 5.1.1.1 (Evaluation of Subforms to Places)을 참고하세요.

예제

(setq stack '(a b c)) =>  (A B C)
(pop stack) =>  A
stack =>  (B C)
(setq llst '((1 2 3 4))) =>  ((1 2 3 4))
(pop (car llst)) =>  1
llst =>  ((2 3 4))

Side Effects

place의 내용이 수정돼요.

Notes

(pop place)의 효과는 대략 다음 코드와 같아요:

(prog1 (car place) (setf place (cdr place)))

다만 후자는 place부분 폼들을 세 번 평가하는 반면, pop은 한 번만 평가한다는 차이가 있어요.

더 알아보기

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