0

我的问题的意思是:

假设有一个列表(abcd)

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

如果列表显示 (abc)

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

谁能帮忙=)?

4

2 回答 2

2

使用长度函数:

(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
)
于 2012-11-01T00:37:42.320 回答
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

作为一般情况,这个解决方案会更好,它也可以同时处理循环列表和非常长的列表。

于 2012-11-01T11:45:07.223 回答