我的意思是:
假设有一个列表(a b c d)
我想确保在继续我的代码之前有4个元素。
如果列表显示(a b c)
我希望它返回零,因为它不是我想要的。
任何人都可以帮助=)?
答案 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
作为一般情况,此解决方案会更好,它也可以同时使用循环列表和很长的列表。