我正在调用一个我在另一个函数中编写的简单函数,但是遇到意外错误。
我已经保存并执行了第一个方程“ square-x”,然后在另一个文件中的第二个函数“平方和”中调用了它。
第一个功能:
(defun square-x (x)
"gives the square of a number"
(* x x))
第二功能:
(defun sum-of-squares (a b)
"sums the squares of two values"
((+ (square-x a)
(square-x b))))
尝试执行此功能时,错误消息为“已定义变量a,但从未使用过”,对于b则相同。但是我已经在调用另一个函数时使用了它们。谢谢
答案 0 :(得分:3)
您正在调用没有参数的形式(+ (square-x a) (square-x b))
。在CL中,只有符号和lambda形式可以位于运算符位置,而不是(+ (square-x a) (square-x b))
;; wrong
((+ (square-x a) (square-x b)))
;; correct
(+ (square-x a) (square-x b))
在两个CLISP的SBCL中,这都是主要的错误,但是我注意到SBCL还警告说从未使用过a
和b
。这当然是因为它完全忽略了错误的运算符(+ (square-x a) (square-x b))
中的代码。
在Scheme中,允许在运算符位置使用表达式的情况下,您将得到Application: not a procedure,因为(+ (square-x a) (square-x b))
的结果(很可能是数字)将在不带参数的情况下被调用为函数。