Lisp 程序抛出输入流错误

问题描述 投票:0回答:1

我收到一条错误消息:

***** - 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 作为我的编译器。我需要帮助修复此错误

lisp
1个回答
1
投票

首先,您需要以正确的格式发布问题。代码应该格式化。看看你的问题是改进代码的格式。

如果您查看代码,就会发现它缺少括号。它比右括号多一个左括号。

将代码写成一个巨大的宏也没有任何意义。您应该删除宏

mac
并在没有它的情况下重写代码。

© www.soinside.com 2019 - 2024. All rights reserved.