Elisp: Sequence. Find, Count, Contains, Get Positions

By Xah Lee. Date: . Last updated: .

Check If Item Exist

seq-contains-p

(seq-contains-p SEQUENCE ELT &optional TESTFN)

  • return t if ELT exist by equality test TESTFN.
  • TESTFN default to equal

〔see Elisp: Equality Test

(seq-contains-p (vector 3 4 5) 5)
;; t

;; result is correct if checking nil exist in sequence
(seq-contains-p (vector 3 nil 5) nil)
;; t
seq-contains

(seq-contains SEQUENCE ELT &optional TESTFN)

This function is obsolete since Emacs 27 (date 2020) . Use seq-contains-p instead.

  • return the first element ELT by equality test TESTFN.
  • TESTFN default to equal

🛑 WARNING: this function cannot be used to check if a shortcut contains nil. It'll always return nil

(seq-contains (vector 3 4 5) 4)
;; 4

;; warning. cannot use this function to check if nil is in a sequence, because it always returns nil
(seq-contains (vector 3 nil 5) nil)
;; nil
seq-position

(seq-position SEQUENCE ELT &optional TESTFN)

return the position of the first occurrence, if exist.

(seq-position (vector 3 4 5 4) 4 )
;; 1
seq-positions

(seq-positions SEQUENCE ELT &optional TESTFN)

check if item exist by equality test, and return a list of positions.

(seq-positions (vector 3 4 5 4) 4 )
;; (1 3)

Find by Criterion, Count

seq-find

(seq-find PRED SEQUENCE &optional DEFAULT)

return first item a function returns true.

(seq-find
 (lambda (x) (string-match "p" x))
 (vector "once" "upon" "a" "time"))
;; "upon"
seq-count

(seq-find PRED SEQUENCE &optional DEFAULT)

return count where a function return true.

(seq-count
 (lambda (x) (string-match "e" x))
 (vector  "once" "upon" "a" "time"))
;; 2

Elisp, Check Element Exist

Elisp, sequence functions