ファイヤープロジェクト
スタック
2003-10-23T05:30+09:00   matsu
スタックはよく使用されるデータ構造なので,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も他の要素と同様にチェックされるようだ.
matsu(C)
Since 2002
Mail to matsu