Lisp - notevery Function



notevery function is a logical negation of every function. Where every function is checking if a predicate is t (true) for all of the elements of the sequence, notevery function checks if the given predicate is not t (true) for at least one of the elements of the sequence. We can treat notevery function as if there is any element not respecting the given criteria.

Syntax - notany function

(notevery predicate sequence)

Arguments

  • predicate− predicate to be applied. It returns t if check on element of sequence is true otherwise nil.

  • sequence− sequence to be searched.

Returns

This function returns nil (false) if predicate returns t (true) for all of the elements of sequence. If predicate returns false for any of the element, notevery function stops call and returns t.

Example - Checking if every number in a list is even

Following example shows how to apply even number check on any element of the list and vectors.

main.lisp

; Check if not every number of list is even; NIL as no odd number
(print(notevery #'evenp '(2 4 6 8)))
(terpri)
; Check if not every number of vector is even; NIL as no odd number
(print(notevery #'evenp '(2 4 6 8)))
(terpri)
; Check if not every number of list is even; T as 9 is odd 
(print(notevery #'evenp '(2 4 6 8 9)))
(terpri)
; Check if not every number of vector is even; T as 9 is odd
(print(notevery #'evenp '(2 4 6 8 9)))

Output

When you execute the code, it returns the following result −

NIL
NIL
T
T

Example - Checking if Not every number is greater than 10

Following example shows how to apply a custom function check using lambda function on elements of the list.

main.lisp

; Check if Not every numbers in the list is greater than 10; returns NIL as every number is > 10
(print(notevery #'(lambda (x) (> x 10)) '(11 15 14 12)))  
(terpri)
; Check if not every numbers in the list is greater than 10; returns t, as no number is > 10
(print(notevery #'(lambda (x) (> x 10)) '(1 5 7 2)))  

Output

When you execute the code, it returns the following result −

NIL
T

Example - Checking String contains no digit

Following example shows how to apply predicate on string.

main.lisp

; Check if not every character in a string is alphabet; NIL as all characters are alphabet
(print(notevery #'alpha-char-p "tutorialspoint"))
(terpri)
; Check if not every character in a string is alphabet; T as 1 is digit
(print(notevery #'alpha-char-p "tutorialspoint123"))

Output

When you execute the code, it returns the following result −

NIL 
T

Example - Checking Multiple lists

We can use notevery function on multiple sequences as well. The predicate must accept the same number of parameters as there are sequences as shown below:

main.lisp

; Checking if none of the elements of first list is greater than corresponding element of second list
; return T as 1 is not greater than 3, 2 is not greater than 5, 3 is not greater than 6
(print(notevery #'> '(1 2 3) '(4 5 6)))
(terpri)
; Checking if none of element of first list is greater than corresponding element of second list
; return NIL as 4 is greater than 1
(print(notevery #'> '(4 5 6) '(1 2 3)))

Output

When you execute the code, it returns the following result −

T
NIL

Applications

The notevery function is very useful in scenarios where no element is to satisfy a given property. Following are few of the applications of some function.

  • Data Validation− To check if no input is invalid.

  • Quality Control− To find any defective item in a batch.

  • Game Operations− To detect, if an enemy is within range.

Advertisements