【发布时间】:2014-07-07 22:42:40
【问题描述】:
我正在自己学习 lisp,但我无法弄清楚为什么会出现此错误。 如果有人可以帮助我,那就太好了:)
这是我收到错误的情况:
(cond ((equal c1 caracter) (push caracter pilatemp))
((or (equal c2 caracter) (equal c3 caracter) (equal c4 caracter) (equal c5 caracter) (equal c6 caracter))
((loop
(setf t1 (jerarquia(caracter)))
(setf t2 (jerarquia(first pilatemp)))
if((or (= t1 t2) (> t1 t2)) (return))
(push (pop pilatemp) piladef))
(push caracter pilatemp)
))
((equal c7 caracter) ((loop
if((equal (first pila) c1) (return))
(push (pop pilatemp) piladef))
(pop pilatemp)))
(T (push caracter piladef))
)
这里是“jerarquia”函数:
(defun jerarquia(x)
(setf c1 ")")
(setf c2 "+")
(setf c3 "-")
(setf c4 "^")
(setf c5 "*")
(setf c6 "/")
(setf c7 "(")
(cond ((equal c1 x) 5)
((equal c4 x) 4)
((equal c5 x) 3)
((equal c2 x) 2)
((equal c7 x) 1)
(T 0)))
这是我得到的错误:
*** - SYSTEM::%EXPAND-FORM:
(LOOP (SETF T1 (JERARQUIA (CARACTER)))
(SETF T2 (JERARQUIA (FIRST PILATEMP))) IF
((OR (= T1 T2) (> T1 T2)) (RETURN)) (PUSH (POP PILATEMP) PILADEF))
should be lambda expression
【问题讨论】:
-
(jerarquia caracter), not(jerarquia(caracter))... 函数的参数没有额外的括号。 -
你是对的,谢谢,但仍然遇到同样的错误:/
-
为什么
LOOP前面有双括号? -
我写了双括号,因为我希望 (push caracter pilatemp) 在第二个条件的
内,而不是在循环内。我不知道这是否可以:/ -
Common lisp error: "should be lambda expression" 的可能重复项请注意,该重复项是在 Google 上搜索
"should be lambda expression" site:stackoverflow.com的第一个结果。
标签: lisp common-lisp