next up previous contents
Next: Return a Result Up: Program Patterns Previous: Test for Existence

Test All Elements

In this situation we require that the elements of a list all satisfy some property. Here is the general schema:

 
 test_all_have_property( Info,[]).

test_all_have_property( Info,[HeadTail]):-

element_has_property( Info,Head),

test_all_have_property( Info,Tail).

Again, the expression Info stands for a specific number of parameters that carry information needed for the determination that an individual element has the desired property. The remaining argument is the recursion argument. We illustrate with a predicate digits/1 for testing that a list of elements consists of digits only. We assume that we have mode all_digits(+).
 
all_digits([]).

all_digits([HeadTail]):-

member(Head,[0,1,2,3,4,5,6,7,8,9]),

all_digits(Tail).

plus definition of member/2.

This predicate has a declarative reading that a list has the property of consisting of digits if the first element is a digit and the tail of the list has the property of consisting of digits.
Note that we can make this fit the schema better if the term [0,1,2,3,4,5,6,7,8,9] is passed in as a parameter.


Paul Brna
Mon May 24 20:14:48 BST 1999