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 ?