新手常见于Lisp,并且有一个非常新手的问题。我的一个变量函数应该返回输入变量的绝对值。它适用于变量大于或等于0但不小于0的情况,我怀疑这是由于cond函数引起的,但我不确定。
我尝试用方括号括起来的代码,但不知道为什么会失败。我知道这不是解决此问题的最佳方法,但我只是想在此阶段习惯于cond语句。
(defun abs-x (x)
(cond ((> x 0) x)
((= x 0) 0)
((< x 0) (-x))))
输入小于0的变量时的错误消息是-X未定义。
答案 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)))