0

私の質問の意味は次のとおりです。

リスト(abcd)があるとしましょう

コードを進める前に、そこに4つの要素があることを確認したいと思います。

リストに (abc) とある場合

それは私が望むものではないので、nilを返したいです。

誰でも助けることができます=)?

4

2 に答える 2

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
)
于 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 に答える