LISP で Queue を実装その1
とりあえずそんな複雑なものではなく、
- in-queue すると先頭に追加される
- de-queue すると先頭から一つ削除、2 番目以降が一つずつ前にくる
というだけのものでいいので書いてみようと思う。
in-queue はあまり考えることはない。空の状態から開始して、渡された値をそのまま Queue に放り込むだけの実装。
? (defun in-queue (queue object) (let ((old-queue queue)) (setf queue (append old-queue (list object))))) IN-QUEUE ?
早速使ってみる。
? (defparameter q nil) Q ? (in-queue q 'a) (A) ? q NIL ?
なんということだ・・・いきなりつまづいた。LISP は引数は値渡しだから、その辺を考える必要がある。引数で渡すようにしていてはダメだ。Class を作成して、その内部に情報を保持させるようにしてみようか。うーん、、、あっさりできると思っていただけにちょっと恥ずかしいかも。