为什么在函数中调用函数时会出现此错误?

时间:2019-07-12 13:24:00

标签: syntax common-lisp

我正在调用一个我在另一个函数中编写的简单函数,但是遇到意外错误。

我已经保存并执行了第一个方程“ 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则相同。但是我已经在调用另一个函数时使用了它们。谢谢

1 个答案:

答案 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还警告说从未使用过ab。这当然是因为它完全忽略了错误的运算符(+ (square-x a) (square-x b))中的代码。

在Scheme中,允许在运算符位置使用表达式的情况下,您将得到Application: not a procedure,因为(+ (square-x a) (square-x b))的结果(很可能是数字)将在不带参数的情况下被调用为函数。