Common Lisp -----应该是lambda
Common Lisp -----should be a lambda
(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,如何修复编译错误?
你的括号太多了。应该是:
(defun foo (x y)
(format t "X: ~a~%" x)
(format t "Y: ~a~%" y))
在所有 Lisp 方言中,括号在句法上都很重要。不能随意加减。
此特定实现的错误消息没有多大帮助。
允许在函数体和许多其他地方对形式进行简单排序:
(defun foo ()
(form-a)
(form-b))
如果不允许,可以使用例如 progn
运算符,其中 returns 最后一种形式的值:
(if (> a b)
a
(progn
(print "smaller")
b))
由于Lisp语法的限制,出现错误信息:
((print "a")
(print "b"))
以上无效,因为 Common Lisp 表达式中的第一个元素需要是:
- 特殊运算符号
- 一个宏符号
- 函数符号
- 或 lambda 表达式
(lambda (a b c) ...)
和 (print "a")
都不是这四个。
因为你有一个列表作为第一种形式,Lisp 系统告诉你这个列表看起来不像一个合适的 lambda 表达式。
使用 lambda 表达式作为第一个元素的这种有效形式的示例是:
((lambda (a b) (+ a b 22))
(+ 3 4)
(+ 6 7))
(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,如何修复编译错误?
你的括号太多了。应该是:
(defun foo (x y)
(format t "X: ~a~%" x)
(format t "Y: ~a~%" y))
在所有 Lisp 方言中,括号在句法上都很重要。不能随意加减。
此特定实现的错误消息没有多大帮助。
允许在函数体和许多其他地方对形式进行简单排序:
(defun foo ()
(form-a)
(form-b))
如果不允许,可以使用例如 progn
运算符,其中 returns 最后一种形式的值:
(if (> a b)
a
(progn
(print "smaller")
b))
由于Lisp语法的限制,出现错误信息:
((print "a")
(print "b"))
以上无效,因为 Common Lisp 表达式中的第一个元素需要是:
- 特殊运算符号
- 一个宏符号
- 函数符号
- 或 lambda 表达式
(lambda (a b c) ...)
和 (print "a")
都不是这四个。
因为你有一个列表作为第一种形式,Lisp 系统告诉你这个列表看起来不像一个合适的 lambda 表达式。
使用 lambda 表达式作为第一个元素的这种有效形式的示例是:
((lambda (a b) (+ a b 22))
(+ 3 4)
(+ 6 7))