(defun foo(x y)(format t "X: ~a~%" x))
上面的功能工作正常, 但是
(defun foo(x y) ((format t "X: ~a~%" x) (format t "Y: ~a~%" y)))
提示
"*** - SYSTEM::%EXPAND-FORM: (FORMAT T "X: ~a~%" X) should be a lambda"
如果我想分别打印参数x,y,我该如何修复编译错误?
答案 0 :(得分:6)
此特定实现的错误消息没有帮助。
在函数体和许多其他地方允许对表单进行简单排序:
(defun foo ()
(form-a)
(form-b))
如果不允许,可以使用progn
运算符,它返回最后一个表单的值:
(if (> a b)
a
(progn
(print "smaller")
b))
由于Lisp语法的限制而出现错误消息:
((print "a")
(print "b"))
上面的内容无效,因为Common Lisp表达式中的第一个元素需要是:
(lambda (a b c) ...)
和(print "a")
都不是这四个。
由于你有一个列表作为第一个表单,Lisp系统告诉你这个列表看起来不像一个正确的lambda表达式。
使用lambda表达式作为第一个元素的这种有效表单的示例是:
((lambda (a b) (+ a b 22))
(+ 3 4)
(+ 6 7))
答案 1 :(得分:5)
你的括号太多了。它应该是:
(defun foo (x y)
(format t "X: ~a~%" x)
(format t "Y: ~a~%" y))
在所有Lisp方言中,括号在语法上都很重要。你不能无缘无故地添加或减去它们。