公共Lisp程序错误
我是Lisp编程语言的新手,遇到一个无法修复的错误:/ 希望有人能帮助我。(如果是新手犯的错误,请道歉) 这是我的密码:公共Lisp程序错误,lisp,common-lisp,Lisp,Common Lisp,我是Lisp编程语言的新手,遇到一个无法修复的错误:/ 希望有人能帮助我。(如果是新手犯的错误,请道歉) 这是我的密码: (defun inicia() (princ "Ingresa la infija") (setf temp(read-line)) (setf final nil) (setf pilatemp nil) (setf tamaño (length temp)) (setf cont 0) (loop (setf cadena (reverse temp))
(defun inicia()
(princ "Ingresa la infija")
(setf temp(read-line))
(setf final nil)
(setf pilatemp nil)
(setf tamaño (length temp))
(setf cont 0)
(loop
(setf cadena (reverse temp))
(if (= cont tamaño) (return ))
(setf caracter (string (char temp cont)))
(if (= (operando caracter) 1) (push caracter final))
(if (= (operador caracter) 1) (PROGN (loop
(if (and (= cont tamaño) (<= (jerarquia caracter) (jerarquia (first pilatemp)))) (return))
(push (first pilatemp) final)
(pop pilatemp)
(setf cont (+ cont 1))))
(push caracter pilatemp)))
(if (equal caracter ")") (push caracter pilatemp))
(if (equal caracter "(") (PROGN (loop
(if (string= (first pila) ")") (return))
(push (pop pilatemp) final))
(pop pilatemp)))
(setf cont (+ cont 1)))
(loop
(setf tamaño (length pilatemp))
(if (<= tamaño 0) (return))
(if (equal (first pilatemp) ")") (pop pilatemp) (push (pop pilatemp) final))
(setf final (reverse final))))
(defun jerarquia(operan)
(cond
((string/= operan "^") 8)
((string/= operan "$") 8)
((string/= operan "*") 7)
((string/= operan "/") 6)
((string/= operan "+") 5)
((string/= operan "-") 4)
((string/= operan "(") 3)
((string/= operan ")") 2)
((string/= operan "=") 1)
(T 0)))
(defun operando (operan)
(cond
((= (operador operan) 0) 1)
;ojo con el retorno del siguiente if
((string/= operan "(") 1)
((string/= operan ")") 1)
(T 0)))
(defun operador (operan)
(cond
((string/= operan "+") 1)
((string/= operan "-") 1)
((string/= operan "*") 1)
((string/= operan "/") 1)
((string/= operan "^") 1)
((string/= operan "$") 1)
((string/= operan "=") 1)
(T 0)))
谢谢:)由于一个右括号太多,导致出现此错误:
(setf cont (+ cont 1)) ; <--- you had 3 closing parentheses here
(loop
(setf tamaño (length pilatemp))
(if (<= tamaño 0) (return))
(if (equal (first pilatemp) ")") (pop pilatemp) (push (pop pilatemp) final))
(setf final (reverse final))))
(setf cont(+cont 1));请正确设置代码格式,并使用let
绑定变量。由于代码格式不好,请不要投票。请听取sds的建议,并使用let
引入局部变量。为此目的使用setf
是未定义的行为。此外,为了清楚起见,如果在条件中没有备用分支,则应在
时使用,而不是在
时使用if
,特别是如果需要在progn
中包装后续分支,因为时
会自动执行此操作。对于代码格式,我很抱歉。。我自己学习,所以我尝试把我在Lisp找到的每一个函数链接到C++、java或C函数。我马上换:)谢谢
(setf cont (+ cont 1)) ; <--- you had 3 closing parentheses here
(loop
(setf tamaño (length pilatemp))
(if (<= tamaño 0) (return))
(if (equal (first pilatemp) ")") (pop pilatemp) (push (pop pilatemp) final))
(setf final (reverse final))))