检查列表中是否有一定数量的元素

时间:2012-11-01 00:09:40

标签: list lisp

我的意思是:

假设有一个列表(a b c d)

我想确保在继续我的代码之前有4个元素。

如果列表显示(a b c)

我希望它返回零,因为它不是我想要的。

任何人都可以帮助=)?

2 个答案:

答案 0 :(得分:2)

使用LENGTH功能:

(when (>= (length list) 4)
  ;; rest of your code
)

如果您需要一个不扫描整个列表的方法只是为了查看是否有N元素,您可以使用此函数:

(defun length-at-least (list n)
  (cond ((zerop n) t)
        (list (length-at-least (cdr list) (1- n)))
        (t nil)))

然后你可以这样做:

(when (length-at-least list 4)
  ;; rest of your code
)

答案 1 :(得分:2)

(defun has-at-least-elements (n list)
  (do () ((< n 1) t)
    (unless list (return))
    (setq n (1- n) list (cdr list))))

(has-at-least-elements 10 '(1 2 3 4))   ; NIL
(has-at-least-elements 4 '(1 2 3 4))    ; T

作为一般情况,此解决方案会更好,它也可以同时使用循环列表和很长的列表。