Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
If statement Lisp如果不是nil_If Statement_Null_Lisp - Fatal编程技术网

If statement Lisp如果不是nil

If statement Lisp如果不是nil,if-statement,null,lisp,If Statement,Null,Lisp,我很抱歉不得不问这个问题,但我正在尝试做一个简单的if语句,检查变量是否为nil (defun test (input) (let ((testvar (first input))) (if (not nil testvar) (do this) (do that)))) 谁能给我解释一下正确的语法吗?jkiiski是对的: 只是(如果不是testvar)。或者先放置真分支,然后执行(如果testvar…是否要检查变量是nil还是不是nil 对于非零:(如果v…) 对

我很抱歉不得不问这个问题,但我正在尝试做一个简单的
if
语句,检查变量是否为
nil

(defun test (input)
  (let ((testvar (first input)))
   (if (not nil testvar)
    (do this)
    (do that))))
谁能给我解释一下正确的语法吗?

jkiiski是对的:


只是(如果不是testvar)。或者先放置真分支,然后执行(如果testvar…

是否要检查变量是nil还是不是nil

对于非零:
(如果v…)

对于零:
(如果(不是v)…)


(在CL中)有许多变体在逻辑上是相同的,但可能更好地表明意图:
(if(null v)…)
如果与上述第二种情况相同,但可能向读者表明您正在寻找“()”而不是逻辑错误(即空列表)。还有很多其他的变化。

因为
nil
等同于布尔值
false
,所以不需要显式地与之比较

简单的

(if testvar
  (...)
  (...))
我会做好的。如果要检查相反的情况,例如,如果要检查某个变量不是
nil
,则只需要
not

(if (not testvar)
  (...)
  (...))
除此之外,还可以使用一个名为的谓词函数。它基本上用于检查给定列表是否为空,但由于空列表相当于
nil
,因此它将起作用(如链接页面上的示例所示):


无论如何,这基本上只会将问题向上移动一层;-)

只要
(如果不是testvar)
。或者先把真正的分支放在第一位,然后做
(如果testvar…
)。风格上的注释:如果testvar“有意”为布尔值,那么
(如果testvar…
)和
(如果(不是testvar)…
)在我看来是应该走的路。如果testvar是另一种可能恰好为零的值,那么您可以使用
(If(not(null testvar))…)
(If(null testvar)…
。编译器可能会对它们进行优化,使其保持一致,但这可能会使其他人更容易阅读代码。
(null '()) =>  T
(null nil) =>  T
(null t) =>  NIL
(null 1) =>  NIL