predicates

Visual Prolog Programs
LabLecture # 3
Lecturer : Sheriff Nafisa
TA : Mubarakah Otbi, Duaa al Ofi , Huda al Hakami
1
In this lecture|:
• Visual Prolog's Basic Program Sections
– The Clauses Section
– The Predicates Section
– The Domains Section
– The Goal Section
• A Closer Look at Declarations and Rules
• Other Program Sections
– The Facts Section
– The Constants Section
– The Global Sections
2
Visual Prolog Programs: Introduction
• The syntax of Visual Prolog is designed to express
knowledge about properties and relationships. You've
already seen the basics of how this is done; in
LabLecture2 you learned about clauses (facts and
rules), predicates, variables, and goals.
• Visual Prolog is a typed Prolog compiler; you declare
the types of the objects that each predicate applies to.
• The type declarations allow Visual Prolog programs to
be compiled right down to native machine code, giving
execution speeds similar to those of compiled C and3
Visual Prolog's
Basic Program Sections
Visual Prolog program includes four basic program
sections:
• The clauses section
• The predicates section
• The domains section
• The goal section.
4
A Visual Prolog program has the following basic structure:
DOMAINS
/* ...
domain declarations
... */
PREDICATES
/* ...
predicate declarations
... */
CLAUSES
/* ...
clauses (rules and facts)
... */
GOAL
/* ...
subgoal_1,
subgoal_2,
etc. */
5
DOMAINS
argument_type1, ..., argument_typeN = <standard domain>
argument_1, ..., argument_N)
= <compound domain 1>;
<compound domain 2>;
< ... >;
<compound domain N>;
PREDICATES
predicateName(argument_type1, argument_type2, ...,
argument_typeN)
CLAUSES
clauses (rules and facts)
GOAL
subgoal_1,
subgoal_2,
etc.
6
The clauses section:
• The clauses section is the heart of a Visual Prolog
program;
• this is where you put the facts and rules that Visual
Prolog will operate on when trying to satisfy the
program's goal.
7
The predicates section
• The predicates section is where you declare your
predicates and the domains (types) of the
arguments to your predicates.
(You don't need to declare Visual Prolog's built-in
predicates.)
- a sequence of clauses defining a predicate is
called a procedure.
- If you define your own predicate in the clauses
section, you must declare it in a predicates
section.
8
How to Declare User-Defined Predicates
• predicateName(argument_type1, argument_type2,
...,argument_typeN)
(Note: that, unlike the clauses in the clauses section of
your program, a predicate declaration is not followed by
a period.)
PredicateNames:Rule
• Must begin with a lower-case letter, followed
by a sequence of letters, digits, and underscores.
• Predicate names can be up to 250 characters long.
Contd..
9
• If you declare a predicate my_predicate(symbol, integer)
in the predicates section, like this:
PREDICATES
my_predicate(symbol, integer)
you don't need to declare its arguments' domains in a
domains section, because symbol and integer are
standard domains.
• But if you declare a predicate my_predicate(name,
number) in the predicates section, like this:
PREDICATES
my_predicate(name, number)
10
contd..
you will need to declare suitable domains for name and
number. Assuming you want these to be symbol and
integer respectively, the domain declaration looks like
this:
DOMAINS
name = symbol
number = integer
PREDICATES
my_predicate(name, number)
11
•
•
•
•
Valid naming characters in Visual Prolog:
Upper-case Letters: A, B, ... , Z
Lower-case Letters: a, b, ... , z
Digits: 0, 1, ... , 9
Underscore character: _
Examples of legal and illegal predicate names:
Legal Predicate Names
Illegal Predicate Names
fact
[fact]
is_a
*is_a*
has_a
has/a
patternCheckList
pattern-Check-List
choose_Menu_Item
choose Menu Item
predicateName
predicate<Name>
first_in_10
>first_in_10
12
The domains section:
• The domains section is where you declare any
domains.
Domains enable you to give distinctive names to
different kinds of data that would otherwise look alike.
(You don't need to declare standard domains.)
Ex: Frank is a male who is 45 years old.
DOMAINS
name, sex = symbol
age
= integer
PREDICATES
person(name, sex, age)
13
The goal section:
• The goal section is where you put the starting goal for a Visual
Prolog program.
• It's simply a list of subgoals.
• The goal keyword is not followed by :-.
• Visual Prolog automatically executes the goal when the
program runs.
14
Basic Standard Domains
Description Description and implementation
char
A character, implemented as an unsigned byte.
Syntactically, it is written as a character surrounded
by single quotation marks: 'a'.
real
A floating-point number, implemented as 8 bytes.
Examples: 42705
9999
86.72
string
A sequnce of characters.
Examples: telephone_number "railway ticket"
"Dorid Inc "
symbol
A sequence of characters.
The syntax is the same as for strings
15
Multiple Arity
• The arity of a predicate is the number of
arguments that it takes.
• You can have two predicates with the same
name but different arity.
• You must group different arity versions of a
given predicate name together in both the
predicates and clauses sections of your
program;
• apart from this restriction, the different arities
are treated as completely different predicates
16
Multiple Arity:Example
DOMAINS
person = symbol
PREDICATES
father(person)
% This person is a father
father(person, person)
% One person is the father of the other person
CLAUSES
father(Man):father(Man,_).
father(adam,seth).
father(abraham,isaac).
17
Other Program Sections
Other commonly-used program sections:
• The facts section,
• The constants section,
• and the various global sections.
18
The Facts Section
• A Visual Prolog program is a collection of facts
and rules.
• The keyword facts declares the facts section. It
is here that you declare the facts to be included
in the dynamic facts section
19
The Constants Section
• A constant declaration section is indicated by
the keyword constants.
syntax:
<Id> = <Macro definition>
• <Id> is the name of your symbolic constant, and
<Macro definition> is what you're assigning to
that constant.
• Each <Macro definition> is terminated by a
newline character, so there can only be one
constant declaration per line.
20
CONSTANTS:Example
zero = 0
one = 1
two = 2
hundred = (10*(10-1)+10)
pi = 3.141592653
ega = 3
slash_fill = 4
red = 4
Before compiling your program, Visual Prolog will replace each constant with the
actual string to which it corresponds. For instance:
...,
A = hundred*34, delay(A),
A = (10*(10-1)+10)*34, delay(A),
21
The Global Sections
Visual Prolog allows you to declare some domains,
predicates, and clauses in your program to be global
(rather than local);
you do this by setting aside separate global domains,
global predicates, and global facts sections at the top of
your program.
These global sections are discussed later.
22
• Exercises..
23