Shammer's Philosophy

My private adversaria

push と pop

簡単だけれども Queue の実装ができたので、今度は Stack を・・・と思ったのだが、どうやら push と pop という Macro があるようだ。これを使用すれば非常に簡単に Stack を実現できる。

? (defparameter *stack* nil)
*STACK*
? (macroexpand-1 '(push 'a *stack*))
(SETQ *STACK* (CONS 'A *STACK*))
T
? (macroexpand-1 '(pop *stack*))
(PROG1 (CAR *STACK*) (SETQ *STACK* (CDR (THE LIST *STACK*))))
T
? (push 'a *stack*)
(A)
? (push 'b *stack*)
(B A)
? (pop *stack*)
B
? (pop *stack*)
A
? (pop *stack*)
NIL
?