我收到一条错误消息:
***** - READ: input stream #<INPUT BUFFERED FILE-STREAM CHARACTER #P"p5.lisp" @49> ends within an object. Last opening parenthesis probably in line 1.**
有人可以帮我解决这个问题吗?
(defmacro mac (start end)
`(progn
(defparameter *start* ',start)
(defparameter *end* ',end)
(defparameter *visited* '())
(defun valid-state-p (state)
(let ((m (car state)) (c (cadr state)) (b (caddr state)))
(and (>= m 0) (< m 3) (>= c 0) (<= c 3) (member b '(I r)))))
(defun goal-state-p (state)
(equal state *end*))
(defun move (state dm dc)
(if (equal (caddr state) 'I)
(list (- (car state) dm) (- (cadr state) dc) 'r)
(list (+ (car state) dm) (+ (cadr state) dc) 'I)))
(defun legal-moves (state)
(let* ((m (car state)) (c (cadr state)) (b (caddr state)) (moves '()))
(when (equal b 'I)
(when (and (>= m 2) (>= c 0))
(push (move state 2 0) moves))
(when (and (>= m 1) (>= c 0))
(push (move state 1 0) moves))
)
(when (equal b 'r)
)
(remove-if-not #'valid-state-p moves)))
(defun dfs (state path)
(if (goal-state-p state)
(reverse path)
(if (member state *visited*)
nil
(setf *visited* (cons state *visited*))
(dolist (next-state (legal-moves state))
(let ((result (dfs next-state (cons next-state path))))
(when result
(return result))))))))
(let ((solution (dfs *start* '())))
(if solution
(dolist (step solution)
(format t "~a ~a ~a~%" (car step) (cadr step) (caddr step)))
(format t "nil")))
(mac '(3 3 l) '(0 0 r))
我不知道如何解决这个问题。我使用 GNU Common Lisp 作为我的编译器。我需要帮助修复此错误
首先,您需要以正确的格式发布问题。代码应该格式化。看看你的问题是改进代码的格式。
如果您查看代码,就会发现它缺少括号。它比右括号多一个左括号。
将代码写成一个巨大的宏也没有任何意义。您应该删除宏
mac
并在没有它的情况下重写代码。