## Learning Prolog via Examples - List Processor

 Part of INTERACTIVE PROLOG GUIDE Prev TOC Next

Back to Data Flow and Recursion

In this subsection, we present a generalized list processor which is capable to do various list operations depending on the definition of functions e and f. This program is a simplified version of general list processor from R.A. O'Keefe's book The Craft of Prolog, MIT, 1990.

```list_processor([],R):-e(R).
list_processor([H|T],R):-
list_processor(T,TR),
f(H,TR,R).```

If we define the functions e and f in a following way:

```e(0).
f(A,B,C):-C is A+B.```

the resulting program sums elements in the list.

The following definition:

```e(0/0).
f(X,A/B,A1/B1):-A1 is A+X, B1 is B+1.```

can be used to compute average of elements of the given list.

The same schema can be used to sort elements in the list or to generate permutations. First we definie functions e and f:

```e([]).
f(X,L,R):-insert(X,L,R).```

If the procedure insert is defined in a following way:

```insert(X,[],[X]).
insert(X,[Y|T],[X,Y|T]):-X<=Y.
insert(X,[Y|T],[Y|NT]):-X>Y,insert(X,T,NT).```

the resulting program sorts list.

If the following definition of insert is used:

```insert(X,T,[X|T]).
insert(X,[Y|T],[Y|NT]):-insert(X,T,NT).```

the resulting program generates permutations of given list successively.

Back to Data Flow and Recursion

 Part of INTERACTIVE PROLOG GUIDE Prev TOC Next

Last update 26nd December 1997
Designed and maintained by Roman Bartak