求助查错
lisp吧
全部回复
仅看楼主
level 5
书上的一段代码,但用起来出错,请看错的哪里,该如何解决?
(defun front-ptr (queue) (car queue)) //定义队列头
(defun rear-ptr (queue) (cdr queue)) //定义队列尾
(defun set-front-ptr (queue item) (setf (car queue) item)) //设置队列头元素
(defun set-rear-ptr (queue item) (setf (cdr queue) item)) //设置队列尾元素
(defun empty-queuep (queue) (null (front-ptr queue))) //判断是否队列空
(defun make-queue() (cons '() '())) //定义队列 (defun front (queue) //取队列头
(if (empty-queuep queue)
(error "FRONT called with an empty")
( car (front-ptr queue)))) (defun insert-queue (queue item) //队列插入新元素
(let ((new-pair (cons item nil)))
(cond ((empty-queuep queue)
(set-front-ptr queue new-pair) queue)
(t (setf (cdr (rear-ptr queue)) new-pair)
(set-rear-ptr queue new-pair) queue)))) (defun delete-queue (queue) //删除队列头
(cond ((empty-queuep queue)
(error "DELETE called with an empty" queue))
(t (set-front-ptr queue (cdr (front-ptr queue)))
queue)))
**********
第一次插入新元素正常,第2次插入新元素出错

2012年01月08日 07点01分 1
level 5
第一次贴代码,看着有点乱,重新贴:
(defun front-ptr (queue) (car queue)) //定义队列头
(defun rear-ptr (queue) (cdr queue)) //定义队列尾
(defun set-front-ptr (queue item) (setf (car queue) item)) //设置队列头元素
(defun set-rear-ptr (queue item) (setf (cdr queue) item)) //设置队列尾元素
(defun empty-queuep (queue) (null (front-ptr queue))) //判断是否队列空
(defun make-queue() (cons '() '())) //定义队列
(defun front (queue) //取队列头 (if (empty-queuep queue) (error "FRONT called with an empty") ( car (front-ptr queue))))
(defun insert-queue (queue item) //队列插入新元素 (let ((new-pair (cons item nil))) (cond ((empty-queuep queue) (set-front-ptr queue new-pair) queue) (t (setf (cdr (rear-ptr queue)) new-pair) (set-rear-ptr queue new-pair) queue))))
(defun delete-queue (queue) //删除队列头 (cond ((empty-queuep queue) (error "DELETE called with an empty" queue)) (t (set-front-ptr queue (cdr (front-ptr queue))) queue)))

2012年01月08日 07点01分 2
1