以下代码中的语法错误是什么?带循环和条件的Lisp代码中的语法错误
(defun getchoice3()
(let ((choice 1))
(format t "~%Enter a number (1-5): ")
(loop for choice = (or (parse-integer (prompt-read "Choice: ") :junk-allowed t) 0) do
while (and (> choice 0) (< choice 6))
(cond
((= choice 1) (print "1 chosen"))
((= choice 2) (print "2 chosen"))
((= choice 3) (print "3 chosen"))
((= choice 4) (print "4 chosen"))
((= choice 5) (print "5 chosen"))
(t (print "invalid entry, exiting."))))
choice))
所报告的错误是很一般:
*** - LOOP: illegal syntax near
(COND ((= CHOICE 1) (PRINT "1 chosen")) ((= CHOICE 2) (PRINT "2 chosen")) ((= CHOICE 3) (PRINT "3 chosen"))
((= CHOICE 4) (PRINT "4 chosen")) ((= CHOICE 5) (PRINT "5 chosen")) (T (PRINT "0 chosen, exiting.")))
in
(LOOP FOR CHOICE = (OR (PARSE-INTEGER (PROMPT-READ "Choice: ") :JUNK-ALLOWED T) 0) WHILE (AND (> CHOICE 0) (< CHOICE 6))
(COND ((= CHOICE 1) (PRINT "1 chosen")) ((= CHOICE 2) (PRINT "2 chosen")) ((= CHOICE 3) (PRINT "3 chosen"))
((= CHOICE 4) (PRINT "4 chosen")) ((= CHOICE 5) (PRINT "5 chosen")) (T (PRINT "0 chosen, exiting."))))
虽然“做”是存在的代码,它不被报告的错误消息。
为什么不从正确缩进和格式化代码开始?那会更容易找到语法错误。 –
这怎么可能?第二个代码行已经没有缩进,但它应该。修理它! –
带有变量选项的最后一行不能正确缩进。修理它。然后问自己:鉴于LOOP的语法,为什么DO在错误的地方,它应该在哪里? –