Lisp - notany Function



notany function is a logical negation of some function. Where some function is checking if a predicate is t (true) for any of the elements of the sequence, notany function checks if the given predicate is t (true) for none of the elements of the sequence. We can treat notany function as "there is no element respecting the given criteria".

Syntax - notany function

(notany 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 t (true) if predicate returns nil, (false) for all of the elements of sequence. If predicate returns true for any of the element, notany function stops call and returns nil.

Example - Checking if sequence contains any even number

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

main.lisp

; Check if no number of list is even; T
(print(notany #'evenp '(1 3 5 7 9)))
(terpri)
; Check if no number of vector is even; T
(print(notany #'evenp '(1 3 5 7 9)))
(terpri)
; Check if no number of list is even; NIL as 2 is even 
(print(notany #'evenp '(1 2 3 5 7 9)))
(terpri)
; Check if no number of vector is even; NIL as 2 is even
(print(notany #'evenp '(1 2 3 5 7 9)))

Output

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

T
T
NIL
NIL

Example - Checking if No 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 No numbers in the list is greater than 10; returns NIL as 15 is > 10
(print(notany #'(lambda (x) (> x 10)) '(1 15 4 2)))  
(terpri)
; Check if any numbers in the list is greater than 10; returns t, as no number is > 10
(print(notany #'(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 string contains any digit; returns T  
(print(notany #'digit-char-p "tutorialspoint"))
(terpri)
; Check if string contains any digit; returns NIL
(print(notany #'digit-char-p "tutorialspoint1323"))

Output

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

T
NIL 

Example - Checking Multiple lists

We can use notany 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 NIL as 3 > 2
(print(notany #'> '(1 2 3) '(4 5 2)))
(terpri)
; Checking if none of element of first list is greater than corresponding element of second list
; return T, as all elements of first list are less.
(print(notany #'> '(1 2 3) '(4 5 6)))

Output

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

NIL
T

Applications

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

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

  • Security− Ensuring that no unautorized access attempt occurs.

  • Set Operations− To verify, if Set intersection is empty.

Advertisements