Declarative Programming Autumn 2014 Basic syntax and sample programs.

Post on 18-Dec-2015

216 views 1 download

Tags:

Transcript of Declarative Programming Autumn 2014 Basic syntax and sample programs.

Declarative Programming

Autumn 2014

Basic syntax and sample

programs

Syntax of terms

Term

Constant VariableStructure

Atom Numberalpha17gross_payjohn_smithdyspepsia+=/=’12Q&A’

01571.6182.04e-27-13.6

likes(john, mary)book(dickens, Z, cricket)f(x)[1, 3, g(a), 7, 9]-(+(15, 17), t)15 + 17 - t

XGross_payDiagnosis_257_

Names an individual Stands for an individualunable to be named when program is written

Names an individualthat has parts

Symbols used

• Uppercase letters A,B,C,...,Z

• Lowercase letters a,b,c,...,z

• Digits 0,1,2,...,9

• Special symbols +,–,*,/,\,<,>,=,:,.,,,&,_,~,[,],(,),... (there are some that may not be allowed - e.g. %)

Atoms

• string of letters, digits and _, starting with a lowercase letter

• string of special symbols

• string of any symbols, delimited by ‘

Numbers

Depend from implementation...Some examples:

01571.6182.04e-27-13.6

Variables

• string of letters, digits and _, starting with an uppercase letter or _

• variable _ is called anonymous variable and has a special semantic meaning

Structures

parents(spot, fido, rover)

The parents of Spot are Fido and Rover.

Functor (an atom) of arity 3. components (any terms)

It is possible to depict the term as a tree:

parents

roverfidospot

Structures

=/=(15+X, (0*a)+(2<<5))

Some atoms have built-in operator declarations so they may be written in a syntactically convenient form. The meaning is not affected. This example looks like an arithmetic expression, but might not be. It is just a term.

<<

2

+

a

*

0

X

+

15

=/=

5

More about operators

Any atom may be designated an operator. The only purpose is for convenience; the only effect is how the term containing the atom is parsed. Operators are ‘syntactic sugar’.

Operators have three properties: position, precedence and associativity.

Examples of operator properties

Position Operator Syntax Normal SyntaxPrefix: -2 -(2)Infix: 5+17 +(17,5)Postfix: N! !(N)

Associativity: left, right, none. X+Y+Z is parsed as (X+Y)+Zbecause addition is left-associative.

Precedence: an integer.X+Y*Z is parsed as X+(Y*Z)because multiplication has higher precedence.

The last point about structures…

Constants are structures of arity 0.

badger

means the same as

badger()

Prolog programs

Programs consist of procedures.

Procedures consist of clauses.

Each clause is a fact or a rule.

Programs are executed by posing queries.

An example…

Example

elephant(george).elephant(mary).elephant(X) :- grey(X), mammal(X), hasTrunk(X).

Procedure for elephant

Predicate

Clauses

Rule

Facts

Example

?- elephant(george).

yes

?- elephant(jane).

no

Queries

Replies

Clauses: Facts and Rules

Head :- Body. This is a rule.

Head. This is a fact.

‘if’‘provided that’

Full stop at the end.

Body of a (rule) clause contains goals

likes(mary, X) :- human(X), honest(X).

Head Body

Goals

Clauses can be given a declarative reading or a procedural reading.

H :- G1, G2, …, Gn.

“That H is provable follows from goals G1, G2, …, Gn being provable.”

Declarative reading:

Procedural reading:

Form of clause:

Interpretation of clauses

“To execute procedure H, the procedures called by goals G1, G2, …, Gn are executed first.”

Sample program 1

likes(john,mary).likes(john,julie).likes(julie,john).likes(peter,jane).likes(jane,icecream).likes(jane,cat).

Sample program 1

likes(john,mary).likes(john,julie).likes(julie,john).likes(peter,jane).likes(jane,icecream).likes(jane,cat).

?-likes(john,mary).

Sample program 1

likes(john,mary).likes(john,julie).likes(julie,john).likes(peter,jane).likes(jane,icecream).likes(jane,cat).

?-likes(john,mary).yes

Sample program 1

likes(john,mary).likes(john,julie).likes(julie,john).likes(peter,jane).likes(jane,icecream).likes(jane,cat).

?-likes(jane,cat).yes

Sample program 1

likes(john,mary).likes(john,julie).likes(julie,john).likes(peter,jane).likes(jane,icecream).likes(jane,cat).

?-likes(julie,cat).no

Sample program 1

likes(john,mary).likes(john,julie).likes(julie,john).likes(peter,jane).likes(jane,icecream).likes(jane,cat).

?-likes(jane,X).X = icecream ?yes

Sample program 1

likes(john,mary).likes(john,julie).likes(julie,john).likes(peter,jane).likes(jane,icecream).likes(jane,cat).

?-likes(jane,X).X = icecream ? ;X = cat ? ;no

Sample program 1

likes(john,mary).likes(john,julie).likes(julie,john).likes(peter,jane).likes(jane,icecream).likes(jane,cat).

?-likes(X,Y),likes(Y,X).X = john,Y = julie ? yes

Sample program 1

likes(john,mary).likes(john,julie).likes(julie,john).likes(peter,jane).likes(jane,icecream).likes(jane,cat).

friends(X,Y) :- likes(X,Y),likes(Y,X).

?-friends(X,Y).X = john,Y = julie ? yes

Sample program 2

parent(john,peter).

parent(christine,peter).

parent(jane,peter).

parent(john,mary).

parent(christine,mary).

parent(jane,mary).

parent(mary,frances).

parent(mary,george).

parent(frances,edward).

parent(edward,isabel).

Sample program 2

parent(john,peter).

parent(christine,peter).

parent(jane,peter).

parent(john,mary).

parent(christine,mary).

parent(jane,mary).

parent(mary,frances).

parent(mary,george).

parent(frances,edward).

parent(edward,isabel).

?-parent(jane,peter).yes

Sample program 2

parent(john,peter).parent(christine,peter).parent(jane,peter).parent(john,mary).parent(christine,mary).parent(jane,mary).parent(mary,frances).parent(mary,george).parent(frances,edward).parent(edward,isabel).

siblings(X,Y) :- parent(X,Z),parent(Y,Z).

?-siblings(john,X).X = christine ?yes

Sample program 2

parent(john,peter).parent(christine,peter).parent(jane,peter).parent(john,mary).parent(christine,mary).parent(jane,mary).parent(mary,frances).parent(mary,george).parent(frances,edward).parent(edward,isabel).

grandparent(X,Y) :- parent(X,Z),parent(Z,Y).

?-grandparent(christine,X).X = frances ? ;X = george ? ;no

Sample program 2

parent(john,peter).parent(christine,peter).parent(jane,peter).parent(john,mary).parent(christine,mary).parent(jane,mary).parent(mary,frances).parent(mary,george).parent(frances,edward).parent(edward,isabel).

ancestor(X,Y) :- parent(X,Y).ancestor(X,Y) :- parent(X,Z),ancestor(Z,Y).

?-ancestor(christine,isabel).yes

Sample program 2

parent(john,peter).parent(christine,peter).parent(jane,peter).parent(john,mary).parent(christine,mary).parent(jane,mary).parent(mary,frances).parent(mary,george).parent(frances,edward).parent(edward,isabel).

ancestor(X,Y) :- parent(X,Y).ancestor(X,Y) :- ancestor(X,Z),parent(Z,Y).

?-ancestor(christine,isabel).yes

Sample program 2

parent(john,peter).parent(christine,peter).parent(jane,peter).parent(john,mary).parent(christine,mary).parent(jane,mary).parent(mary,frances).parent(mary,george).parent(frances,edward).parent(edward,isabel).

ancestor(X,Y) :- ancestor(X,Z),parent(Z,Y).ancestor(X,Y) :- parent(X,Y).

?-ancestor(christine,isabel).

How PROLOG answers queriesHow to answer a query ?-Q.?

• find the first fact P. or rule P:-R1,...,Rn. with lhs P unifiable with Q

• if P corresponds to fact, return yes together with the instantiation values of variables from Q

• if P corresponds to rule, answer the queries R1,..,Rn (in this order, keeping the instantiated variables from the previous ones)

• if all queries R1,..,Rn are successful, return yes

• otherwise find next fact or rule unifiable with Q

• if there are no more such facts or rules, return no

How PROLOG answers queries

Goals and sub-goals:

A logical sentence to be proved: succeed (satisfy) or fail.

A goal could be a query or the conditions of a rule: the relationship between queries and rules

Rule: “goal:-goal”, the relationship is “true”, but the truth values of condition and conclusion are unknown

Prolog breaks a complex goal into a sequence of sub-goals to evaluate the truth value of a (complex) goal

How PROLOG answers queries

Searching, Matching (unifying) and backtracking

S-M-B is the way in which goals are established

A goal is always broken into ground sub-goals consisting of individual predicates, which are then searched from left to right with due regard for the logical meaning. ?-a,b;c,d.

Searching: systematically (depth-first) searches the knowledge to find a match for a ground sub-goal.