检查列表是否为空的最佳方法是什么?

wro*_*ame 7 scheme

在Common Lisp中,如果我想检查列表是否为空,我可以简单地使用列表本身作为条件,因为所有非零列表都被认为是真的.但是,我发现在Scheme中,同样会让Scheme认为我正在尝试调用一个函数.有没有更好的方法来检查Scheme中的列表是否为null而不是定义另一个函数(not (null? x))呢?

erj*_*ang 10

在Scheme中,一切都不#f是真的,所以在陈述中都要'()考虑.#tif

从而,

(if '() "true" "false") => "true"
(not '()) => #f
Run Code Online (Sandbox Code Playgroud)

使用(not (null? x))是检查列表是否为空的最简单的方法:它准确描述了您想要的内容,而在您给出的内容不是列表的极端情况下,它会给您不同的行为:

(if (not (null? #t)) "true" "false") => "true"
(if (not #t) "true" "false") => "false"
Run Code Online (Sandbox Code Playgroud)


Sam*_*adt 7

如果您知道它是一个列表,您可以使用(pair? x),因为每个列表都是一对或'().