Processing lists in Prolog - 2 - University of Birmingham
[Pages:32]06-25433 ? Logic Programming
Processing lists in Prolog - 2
This lecture shows that techniques introduced before (analysing terminating conditions and recursive programming) can be used to develop more complex procedures.
06-25433 ? Logic Programming
This lecture is about:
? writing procedures with one or more terminating or recursive clauses;
? deleting one or all instances of an element from a list;
? The effects of matching v. unification; ? changing the order in which solutions are
presented by changing clause order.
8 - Processing lists in Prolog: 2
1
06-25433 ? Logic Programming
Last time: Terminating at the end of the list
For instance counting all elements:
Terminates at the
% 1 - terminating
end of the list.
count_elem([], Total, Total).
% 2 - recursive
count_elem([Hd|Tail], Sum, Total) :-
Sum1 is Sum + 1,
count_elem([Hd|Tail], Sum1, Total).
8 - Processing lists in Prolog: 2
2
06-25433 ? Logic Programming
Last time: Terminating when given element is found
For instance finding a given element:
% 1 - terminating elem(Elem, [Elem|_]). % 2 - recursive elem(Elem, [_|Tail]) :-
elem(Elem, Tail).
Terminates before the end of the list.
Notice, this can be run "backwards" to enumerate the
individual elements of a list.
Demo1
8 - Processing lists in Prolog: 2
3
06-25433 ? Logic Programming
Last time: Terminating when given number of elements have been scanned
% 1 ? recursive nth(Count, Item, [_|Tail]) :-
Count > 1, Count0 is Count - 1, nth(Count0, Item, Tail).
% 2 ? terminating nth(1, Head, [Head|_]).
8 - Processing lists in Prolog: 2
The code counts down from the given position to 1.
Demo2
4
06-25433 ? Logic Programming
Consolidation moment
Three main ways to halt recursion in list processing:
1. at the end of the list ([]); 2. when a specific element is found; 3. when a specific position in a list is reached.
8 - Processing lists in Prolog: 2
5
06-25433 ? Logic Programming
More than one recursive clause
We've seen an example with two recursive clauses:
classify([], [], []).
classify([Head|Tail], [Head|Numbers], Atoms) :-
number(Head), classify(Tail, Numbers, Atoms).
classify([Head|Tail], Numbers, [Head|Atoms]) :-
atom(Head), classify(Tail, Numbers, Atoms).
8 - Processing lists in Prolog: 2
6
06-25433 ? Logic Programming
More than one terminating clause - 1
It is sometimes necessary to have more than one terminating clause.
Consider the task of pairing the elements of two lists with any elements left over added to the end of the list:
| ?- pair([ann,bel], [joe,bob,sam], Res).
Res = [,,sam] ? ;
no
8 - Processing lists in Prolog: 2
7
................
................
In order to avoid copyright disputes, this page is only a partial summary.
To fulfill the demand for quickly locating and searching documents.
It is intelligent file search solution for home and business.
Related download
- using python for computing on elliptic curves very preliminary math
- arrays definition example of an array named a of 5 elements a 0 45
- elements of programming interviews
- pairs in python idc online
- working with geodatabases using sql and python esri
- meshing for the finite element method people
- processing lists in prolog 2 university of birmingham
- python notes for professionals
- python lists tutorials point
- big o arraylist carnegie mellon university
Related searches
- list of lists in python
- grammar for lists in sentences
- multiply two lists in python
- auditory processing disorder in adults
- cognitive processing disorder in children
- linked lists in java
- how to do lists in python
- python printing lists in columns
- how to multiply lists in python
- data validation lists in excel
- dict of lists in python
- how to cross reference lists in excel