Lisp - every Function



Lisp provides every function on sequence (list, vector or string) to check if a predicate holds t (true) for all elements of the sequence. every function applies the predicate on each element of the sequence in order. If any of element fails false for the given predicate, every function calls stops and return false.

Syntax - every function

(every 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 holds true for all elements of sequence, nil(false) otherwise.

Example - Checking all numbers as even numbers

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

main.lisp

; Check all elements of a list to be even; T
(print(every #'evenp '(2 4 6 8)))
(terpri)
; Check all elements of a vector to be even; T
(print(every #'evenp #(2 4 6 8)))
(terpri)
; Check all elements of a list to be even; NIL as 3 is odd
(print(every #'evenp '(2 3 4 6 8)))
(terpri)
; Check all elements of a vector to be even; NIL as 3 is odd
(print(every #'evenp #(2 3 4 6 8)))

Output

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

T
T
NIL
NIL

Example - Checking numbers less than 10

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

main.lisp

; Check if all numbers in the list are less than 10; returns t
(print(every #'(lambda (x) (< x 10)) '(1 5 4 2)))  
(terpri)
; Check if all numbers in the list are less than 10; returns false
(print(every #'(lambda (x) (< x 10)) '(1 5 11 2)))  

Output

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

T
NIL

Example - Checking all character in String as alphabetic

Following example shows how to apply predicate on string.

main.lisp

; Checking a string to contain only alphabets; returns T
(print(every #'alpha-char-p "tutorialspoint")) 
(terpri)
; Checking a string to contain only alphabets; returns NIL as it is alphanumeric
(print(every #'alpha-char-p "tutorialspoint123")) 

Output

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

T
NIL

Example - Checking Multiple lists for equality

We can use every 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 lists are same; returns T
(print(every #'(lambda (x y) (eq x y)) '(a a a) '(a a a)))
(terpri)
; Checking if list are same; returns NIL
(print(every #'(lambda (x y) (eq x y)) '(a a a) '(b b b)))

Output

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

T
NIL

Applications

The every function is very useful in scenarios where all elements must meet a certain criteria. Following are some of the applications of every function.

  • Data validation− To check if all entries are as per given criteria.

  • Property testing− To verify if entries of a collection are following required property.

  • Algorithm verification− To ensure, all elements of the collection follow the required pre-requisites.

By using every function with relevant predicate, we can efficiently and concisely express complex conditions on a sequence in Lisp.

Advertisements