Elisp: Some and Every

By Xah Lee. Date: . Last updated: .

Here's how to write “every” and “some” functions.

(defun my-some (xlist)
  "return t if at least one element is true"
  (eval `(or ,@ xlist)))

(defun my-every (xlist)
  "return t if at least one element is true"
  (eval `(and ,@ xlist)))

;; HHHH---------------------------------------------------
;; test

(my-every (list 3 nil 4))
(my-every (list 3 4 5))

Here's naive try using apply.

(apply #'or '( nil nil t))

;; Debugger entered--Lisp error: (invalid-function or)
;;   or(nil nil t)
;;   apply(or (nil nil t))
;;   eval((apply (function or) (quote (nil nil t))) nil)
;;   elisp--eval-last-sexp(nil)
;;   eval-last-sexp(nil)
;;   funcall-interactively(eval-last-sexp nil)
;;   call-interactively(eval-last-sexp nil nil)
;;   command-execute(eval-last-sexp)

It doesn't work because “or” is a “special form”, meaning, it's a lisp macro but written in C.