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

时间:2011-09-09 10:42:57

标签: scheme

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

2 个答案:

答案 0 :(得分:8)

在Scheme中,非#f的所有内容都是真实的,因此'()#t语句中被视为if

因此,

(if '() "true" "false") => "true"
(not '()) => #f

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

(if (not (null? #t)) "true" "false") => "true"
(if (not #t) "true" "false") => "false"

答案 1 :(得分:7)

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