我的问题的意思是:
假设有一个列表(abcd)
在继续我的代码之前,我想确保其中有 4 个元素。
如果列表显示 (abc)
我希望它返回 nil,因为这不是我想要的。
谁能帮忙=)?
使用长度函数:
(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
)
(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
作为一般情况,这个解决方案会更好,它也可以同时处理循环列表和非常长的列表。