Shammer's Philosophy

My private adversaria

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 を作成して、その内部に情報を保持させるようにしてみようか。うーん、、、あっさりできると思っていただけにちょっと恥ずかしいかも。