+ All Categories
Home > Documents > Prolog - Radfordmhtay/ITEC480/Lecture_Prolog/...=:= equal ( in Visual Prolog, = ) =\= not equal ( in...

Prolog - Radfordmhtay/ITEC480/Lecture_Prolog/...=:= equal ( in Visual Prolog, = ) =\= not equal ( in...

Date post: 28-Jan-2021
Category:
Upload: others
View: 13 times
Download: 0 times
Share this document with a friend
50
1/16/2010 1 Prolog Programming Chapter 3 Lists, Operators, Arithmetic
Transcript
  • 1/16/2010

    1

    Prolog Programming

    Chapter 3

    Lists, Operators, Arithmetic

  • 2

    Chapter 3Lists, Operators, Arithmetic

    Representation of lists

    Some operations on lists

    Operator notation

    Arithmetic

  • 3

    3.1 Representation of lists

    The list is a simple data structure widely used in non-

    numeric programming

    A list is a sequence of any number of items such as

    ann, tennis, tom, skiing

    In Prolog,

    [ann, tennis, tom, skiing]

  • 4

    List as Object in Prolog

    Two cases

    Empty list

    Non-empty list

    List is written as a Prolog atom, [ ]

    A non-empty list contains two things

    head, the first item of the list

    tail, the remaining part of the list

  • 5

    List looks like a tree

    List can be written as

    .(Head, Tail)

    For example,

    [ ann, tennis, tom, skiing ] can be written as

    .( ann, .( tennis, .( tom, .( skiing, [ ] ) ) ) )

  • 6

    Tree representation of the list [ann,tennis,tom,skiing]

  • 7

    Examples

    ?- List1 = [a,b,c] ,

    List2 = . ( a , . ( b , . (c , [ ] ) ) ) ).

    List1 = [a,b,c]

    List2 = [a,b,c]

    ?- Hobbies1 = . ( tennis, . ( music, [ ] ) ),

    Hobbies2 = [ skiing, food ],

    L = [ ann, Hobbies1, tom, Hobbies2 ]

    Hobbies1 = [ tennis, music]

    Hobbies2 = [ skiing, food ]

    L = [ ann, [ tennis, music ], tom, [skiing, food] ]

  • 8

    More Examples

    If L = [ a, b, c ]

    Tail = [ b, c ] and L = . ( a, Tail )

    Another notation,

    L = [ a | Tail ]

    [ a, b, c ] = [ a | [ b, c ] ] = [ a, b, [ c ] ] = [ a, b, c, | [ ] ]

    In summary, lists can be written as

    [ Item1, Item2, … ]

    [ Head | Tail ]

    [ Item1, Item2, … | Others ]

  • 9

    Chapter 3Lists, Operators, Arithmetic

    Representation of lists

    Some operations on lists

    Operator notation

    Arithmetic

  • 10

    3.2 Some Operations

    Checking membership in a list

    Concatenating two lists

    Adding an item to a list and deleting an item from a list

  • 11

    Membership in a list

    Define the membership as

    member ( X , L )

    where X is an object and L is a list

    For example

    member ( b, [ a, b, c ] ) true

    member ( b, [ a, [ b, c ] ] ) not true

    member ( [ b, c ], [ a, [ b, c ] ] ) true

  • 12

    Membership in a list continues ---

    X is a member of L if either:

    (1) X is the head of L, or

    (2) X is a member of the tail of L

    In Prolog,

    member ( X, [ X | Tail ] ).

    member ( X, [ Head | Tail ] ) :-

    member ( X, Tail ).

  • 13

    Membership in a list continues ---

    Questions to Prolog,

    ?- member ( b, [ a, b, c ] ) .

    Yes

    ?- member ( X, [ a, b, c ] ) .

    X=a

    X=b

    X=c

  • 14

    3.2 Some Operations

    Checking membership in a list

    Concatenating two lists

    Adding an item to a list and deleting an item from a list

  • 15

    Concatenating two lists

    Define the relation as follow:

    conc(L1,L2,L3)

    where L1 and L2 are two lists and L3 is their concatenation

    In Prolog,

    conc([ ], L1, L1).

    conc([X|L1],L2,[X|L3] :-

    conc(L1,L2,L3).

  • 16

    Concatenating two lists continues ---

    Question to Prolog

    ?- conc ( [ a, b, c ] , [ d, e, f ], L ) .

    L = [ a, b, c, d, e, f ]

    Also concatenation relation can be used in the inverse

    direction for decomposition a given list into two lists

  • 17

    Decomposition a given list into two lists using concatenation

    ?- conc(L1,L2,[a,b,c]).

    L1=[ ]

    L2=[a,b,c]

    L1=[a]

    L2=[b,c]

    L1=[a,b]

    L2=[c]

    L1=[a,b,c]

    L2=[ ]

  • 18

    Look for a certain pattern in a listusing concatenation

    ?- conc(Before,[may|After],

    [jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec]).

    Before=["jan","feb","mar","apr"]

    After=["jun","jul","aug","sep","oct","nov","dec"

  • 19

    Delete from a list using concatenation

    ?- L1=[a,b,z,z,c,z,z,z,d,e],

    conc(L2,[z,z,z|_],L1).

    Delete everything that follows three successive

    occurrences of z in list L1

    L1=["a","b","z","z","c","z","z","z","d","e"],

    L2=["a","b","z","z","c"]

  • 20

    Check membership using concatenation

    member1 ( X , L ) :-

    conc ( _ , [ X | _ ] , L ) .

    ?- member1(X,[a,b,c])

    X=a

    X=b

    X=c

  • 21

    Adding an item

    In Prolog,

    add ( X, L, [ X | L ] ) .

    where X is a new item and it is added to the list L

    Question

    ?- add ( a, [ b, c ], L ) .

    L=["a","b","c"]

  • 22

    Deleting an item

    Deleting an item X from a list L

    del ( X, L, L1 ).

    where L1 is a new list after X is removed from the list L

    There are two cases as follows:

    (1) If X is the head of the list then the result after the

    deletion is the tail of the list

    (2) If X is in the tail then it is deleted from there

  • 23

    Deleting an item continue ---

    In Prolog,

    del ( X, [ X | Tail ], Tail ) . % case 1

    del ( X, [ Y | Tail ], [ Y | Tail1 ] ) : - % case 2

    del ( X, Tail,Tail1 ) .

    Question

    ?- del ( a, [a, b, a, a ], L ).

    L=["b","a","a"]

    L=["a","b","a"]

    L=["a","b","a"]

  • 24

    Add an item to a list by using delete

    “del” can be used in the inverse direction, to add an item

    to a list by inserting the new item anywhere in the list

    What is L, such that after deleting 5 from L, obtain [2,3,4]?

    Question

    ?- del ( 5, L, [ 2, 3, 4 ] ) .

    L=[5,1,2,3]

    L=[1,5,2,3]

    L=[1,2,5,3]

    L=[1,2,3,5]

  • 25

    Inserting an item to a list and checking membership using delete

    We define “insert” relation as follows:

    insert ( X, List, BiggerList ) :-

    del ( X, BiggerList, List ) .

    We can also define membership relation using del

    member2 ( X, List ) :-

    del ( X, List, _ ) .

  • 26

    Sublist

    Sublist relation has two arguments, a list L and a list S

    such that S occurs within L as its sublist

    sublist ( S, L )

    Examples,

    sublist([c, d, e ] , [ a, b, c, d, e, f ] ) true

    sublist([c, e ] , [ a, b, c, d, e, f ] ) not true

  • 27

    Sublist continues ---

    S is a sublist of L if:

    (1) L can be decomposed into two lists, L1 and L2 and

    (2) L2 can be decomposed into two lists, S and some L3

    In Prolog,

    sublist ( S, L ) :-

    conc ( L1, L2, L ) ,

    conc ( S, L3, L2 ) .

  • 28

    Sublist continues ---

    Question

    ?- sublist ( S, [ a, b, c ] ) .S=[]

    S=["a"]

    S=["a","b"]

    S=["a","b","c"]

    S=[]

    S=["b"]

    S=["b","c"]

    S=[]

    S=["c"]

    S=[]

  • 29

    Permutations

    Permutation relation is defined with two arguments such

    as permutation(L,P) where P is a permutation of list L

    There are two cases:

    If the first list is empty then the second list must also be

    empty

    If the first list is not empty then it has the form [X|L] and

    first permute L, obtaining L1 and then insert X at any

    position into L1

  • 30

    Defining ‘permutation’ in Prolog

    In Prolog,

    permutation ( [ ], [ ] ) . %case 1

    permutation ( [ X | L ], P ) : - %case 2

    permutation ( L, L1 ) ,

    insert ( X, L1, P) .

  • 31

    Alternative definition for permutation

    In Prolog,

    permutation2 ( [ ], [ ] ) . %case 1

    permutation2 (L, [ X | P ] ) : - %case 2

    del ( X, L, L1) ,

    permutation2 ( L1, P ) .

  • 32

    Question to prolog

    ?- permutation2 ( [ a, b, c ], P ) .

    P=["a","b","c"]

    P=["a","c","b"]

    P=["b","a","c"]

    P=["b","c","a"]

    P=["c","a","b"]

    P=["c","b","a"]

  • 33

    Chapter 3Lists, Operators, Arithmetic

    Representation of lists

    Some operations on lists

    Operator notation

    Arithmetic

  • 34

    3.3 Operator notation

    The operator with the highest precedence is the

    principle functor of the term

    A programmer can define his own operators.

    Examples,

    For the expression 2 * a + b * c can be written as

    + ( * ( 2 , a ) , ( b , c ) )

    For the expression, peter has information is written as

    has ( peter , information )

  • 35

    Operator definition

    A programmer can define new operators by inserting into

    the program special kinds of clauses, sometimes called

    directives, which act as operator definitions.

    :- op(600,xfx,has)

    where „has‟ as an operator, whose precedence is 600,

    and its type is xfx, which is a kind of infix operator.

  • 36

    Operator definition continues ---

    operator names are atoms

    precedence is in the range between 1 and 1200

    three groups of operators are infix, prefix and postfix

  • 37

    Three groups of operator types

    infix operators of three types:

    x f x x f y y f x

    prefix operators of two types:

    f x f y

    postfix operators of two types

    x f y f

  • 38

    Some Predefined Operators

    :-op(1200,sfs,[:-,-->]).

    :-op(1200,fx, [:-,?-]).

    :-op(1100,xfy,‟;‟).

    :-op(1050,xfy,‟->‟).

    :-op(1000,xfy,‟,‟).

    :-op(900,fy,[not,‟\+‟]).

    etc ...

  • 39

    Summary

    Operators can be infix, prefix, or postfix

    operators, as functors, only hold together components of

    structures

    A programmer can define his or her own operators. Each

    operator is defined by its name, precedence and type.

    The precedence is an integer within some range, usually

    between 1 and 1200.

    The type of an operator depends on two things:

    the position of the operator with respect to the argument

    the precedence of the arguments compared to the precedence of

    the operator itself

  • 40

    3.4 Arithmetics

    Some predefined operators:

    + addition

    - subtraction

    * multiplication

    / division

    ** power

    // integer division

    mod modulo, the remainder of integer division

  • 41

    Expression and questions

    For the expression

    X = 1 + 2

    In Prolog,

    ?- X is 1 + 2.

    X = 3

    In Visual Prolog,

    Goal

    X = 1 + 2 .

    Answer

    X = 3

  • 42

    Comparing numerical values

    Clause

    born(george, 1955).

    born(mary,1975).

    born(joyce,1962).

    Goal

    born(Name,Year),

    Year >= 1950,

    Year

  • 43

    Comparing operators

    > greater than

    < less than

    >= greater than or equal

    =< less than or equal ( in Visual Prolog < )

  • 44

    Greatest Common Divisor Problem

    For given integers X and Y, suppose that D is the

    greatest common divisor of X and Y, there are three

    cases :

    (1) If X and Y are equal then D is equal to X

    (2) If X < Y then D is equal to the greatest common

    divisor of X and the difference Y - X

    (3) If Y < X then do the same as in case 2 with X and Y

    interchanged

  • 45

    In Prolog

    gcd(X,X,X).

    gcd(X,Y,D) :-

    X < Y,

    Y1 = Y - X ,

    gcd(X, Y1, D).

    gcd(X,Y,D) :-

    Y < X ,

    gcd(Y, X, D).

  • 46

    Length of a list

    length ( [ ], 0 ) .

    length( [ _ | Tail ], N ) :-

    length ( Tail , N1 ),

    N = N1 + 1.

    Question to Prolog

    ?- length([b,c,d,e],N).

    Answer

    N=4

  • 47

    Think about some problems

    Define the relation max ( X, Y, MAX ) where Max is the

    greater of two numbers X and Y

    Define the predicate sumlist ( List, Sum ) where Sum is

    the sum of a given list of numbers List

    Define the predicate ordered ( List ) which is true if List

    is an ordered of numbers.

  • 48

    max

    max ( X, Y, X ) :-

    X >= Y.

    max ( X, Y, Y ) :-

    X < Y.

  • 49

    sumlist

    sumlist([],0).

    sumlist([First|Rest],Sum) :-

    sumlist(Rest,SumRest),

    Sum is First + SumRest.

  • 50

    ordered

    ordered([X]).

    ordered([X,Y|Rest]) :-

    X


Recommended