スタック
スタックはよく使用されるデータ構造なので,Lispにはリストをスタックとして扱うための関数がある.それをちょっと使ってみた.
スタックを扱う関数の名前といえば,pushとpopである.
> (setf lst nil) NIL > (push 'a lst) (A) > lst (A) > (push 'b lst) (B A) > (pop lst) B > lst (A)pushとpopはその関数の役割からも分かるとおり,破壊的な関数である.
pushnewマクロは指定された要素が指定された(スタックとして使用している)リストに同じ要素がなければ,実際にpushする.同じ要素があればpushしない.
> (setf lst2 nil) NIL > (push 'a lst2) (A) > (push 'b lst2) (B A) > (push 'c lst2) (C B A) > lst2 (C B A) > (pushnew 'b lst2) (C B A) > (pushnew nil lst2) (NIL C B A) > (pushnew nil lst2) (NIL C B A)試しにnilもpushnewしてみた.nilも他の要素と同様にチェックされるようだ.