代码之家  ›  专栏  ›  技术社区  ›  Paul Reiners

检查公共lisp中列表中的每个列表是否为空

  •  3
  • Paul Reiners  · 技术社区  · 14 年前

    我知道我可以检查列表是否只包含这样的空列表

    CL-USER> (null (find-if (lambda (item) (not (null item))) my-list))
    

    在哪里? my-list 是列表列表。

    例如:

    CL-USER> (null (find-if (lambda (item) (not (null item))) '(nil (bob) nil)))
    NIL
    CL-USER> (null (find-if (lambda (item) (not (null item))) '(() () ())))
    T
    

    但是,在Lisp中,难道没有一种更短、更简单的方法可以做到这一点吗?如果是这样,怎么办?

    2 回复  |  直到 14 年前
        1
  •  11
  •   sepp2k    14 年前

    高阶函数 every 接受一个谓词函数和一个列表,并返回true iff。谓词为列表中的每个元素返回true。

    所以你可以这样做:

    (every #'null my-list)
    
        2
  •  1
  •   Rainer Joswig mmmmmm    14 年前
    (find-if #'identity list)
    
    (not (find-if-not #'null list))
    

    有关列表和序列的完整函数列表,请参考通用的lisp hyperspec。