使用cond语句时发生意外错误

时间:2019-07-10 15:59:56

标签: common-lisp

新手常见于Lisp,并且有一个非常新手的问题。我的一个变量函数应该返回输入变量的绝对值。它适用于变量大于或等于0但不小于0的情况,我怀疑这是由于cond函数引起的,但我不确定。

我尝试用方括号括起来的代码,但不知道为什么会失败。我知道这不是解决此问题的最佳方法,但我只是想在此阶段习惯于cond语句。

     (defun abs-x (x)
       (cond ((> x 0) x)
             ((= x 0) 0)
             ((< x 0) (-x))))

输入小于0的变量时的错误消息是-X未定义。

2 个答案:

答案 0 :(得分:7)

使用

    (- x)
;     ^
;     |
;  The space
;  is important.

代替(-x)

这是因为-是标识符中的有效字符,因此-x是有效的函数名称。不过,-x之间有空格,它会调用函数-,该函数需要一个或多个参数。

答案 1 :(得分:0)

更短:

 (defun abs-x (x)
   (cond ((> x 0) x)
         (t (- x))))

使用(- 0)也等于0的事实来减少检查次数。

代替<=进行最后检查,请使用更简单的t-常见lisp else子句中的cond

对于if,这将是:

(defun abs-x (x)
  (if (> x 0)
      x
      (- x)))