pop — 리스트의 첫 요소를 꺼내기
pop — 리스트의 첫 요소를 꺼내기
스택처럼 쌓아 둔 리스트에서 맨 앞 요소 하나를 꺼내 쓰려면 pop을 써요. pop은 매크로로, place에 저장된 리스트의 car를 돌려주면서 동시에 place를 cdr로 바꿔치기해요. 꺼내는 것과 리스트를 줄이는 작업이 한 번에 일어나죠.
시그니처
pop place => element
본문
인자와 값
place— place이고, 그 값은 리스트예요 (반드시는 아니지만 dotted list나 circular list일 수도 있어요).element— 객체로, place 내용물의 car예요.
설명
place의 값을 읽어서, 꺼내온 리스트의 car를 기억하고, 그 리스트의 cdr을 place에 다시 쓴 다음, 처음 꺼내온 리스트의 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) — 일반화된 참조