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

List 检查列表中是否有一定数量的元素,list,lisp,List,Lisp,我的问题的意思是: 假设有一个列表(a b c d) 在继续我的代码之前,我想确认其中有4个元素 如果清单上写着(a b c) 我希望它返回零,因为这不是我想要的 有人能帮忙吗?使用长度函数: (when (>= (length list) 4) ;; rest of your code ) (defun length-at-least (list n) (cond ((zerop n) t) (list (length-at-least (cdr list) (

我的问题的意思是:

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

在继续我的代码之前,我想确认其中有4个元素

如果清单上写着(a b c)

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


有人能帮忙吗?

使用长度函数:

(when (>= (length list) 4)
  ;; rest of your code
)
(defun length-at-least (list n)
  (cond ((zerop n) t)
        (list (length-at-least (cdr list) (1- n)))
        (t nil)))
如果您需要一种方法,该方法不扫描整个列表,而只是查看是否有N个元素,则可以使用此函数:

(when (>= (length list) 4)
  ;; rest of your code
)
(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
)

使用长度函数:

(when (>= (length list) 4)
  ;; rest of your code
)
(defun length-at-least (list n)
  (cond ((zerop n) t)
        (list (length-at-least (cdr list) (1- n)))
        (t nil)))
如果您需要一种方法,该方法不扫描整个列表,而只是查看是否有N个元素,则可以使用此函数:

(when (>= (length list) 4)
  ;; rest of your code
)
(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至少有个元素(n个列表)
(do()(
一般情况下,此解决方案会更好,它还可以同时处理循环列表和非常长的列表。

(defun至少有元素(n个列表)
(do()(

一般情况下,此解决方案会更好,它还可以同时处理循环列表和非常长的列表。

添加递归函数以至少处理长度,添加递归函数以至少处理长度。您还可以使用
(not(null(nthcdr(1-n)list))
,假设
n
大于或等于1。编辑:@barmar最初接受的答案是比较
length
的结果,因此我将在这个答案中留下我的投票。此外,Common Lisp不必进行尾部调用消除。
(至少有元素4'(1 2 3 4 5.6))
返回
t
,那么
(至少有元素4'(1 2.3))
呢?我同意。您还可以使用
(not(null(nthcdr(1-n)list))
,假设
n
大于或等于1。编辑:@barmar最初接受的答案是比较
length
的结果,因此我将在这个答案中留下我的投票。此外,Common Lisp不必进行尾部调用消除。
(至少有元素4'(1 2 3 4 5.6))
返回
t
,那么
(至少有元素4'(1 2.3))
呢?