Prolog Programming (Volume 2)

Slides:



Advertisements
Similar presentations
Prolog Programming (Volume 2) Dr W.F. Clocksin. Lists Lists are the same as other languages (such as ML) in that a list of terms of any length is composed.
Advertisements

Lisp. Versions of LISP Lisp is an old language with many variants Lisp is alive and well today Most modern versions are based on Common Lisp LispWorks.
C. Varela; Adapted w/permission from S. Haridi and P. Van Roy1 Declarative Programming Techniques Accumulators, Difference Lists (VRH ) Carlos Varela.
Declarative Programming Lists in PROLOG Autumn 2014.
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 6: More Lists Theory –Define append/3, a predicate for concatenating two lists, and illustrate.
Prolog Programming (Volume 5) Dr W.F. Clocksin. List cells + Unification = Great Idea Normally we use ‘proper lists’, which are defined according to the.
Introduction to PROLOG ME 409 Lab - 1. Introduction to PROLOG.
11/10/04 AIPP Lecture 6: Built-in Predicates1 Combining Lists & Built-in Predicates Artificial Intelligence Programming in Prolog Lecturer: Tim Smith Lecture.
Prolog: List © Patrick Blackburn, Johan Bos & Kristina Striegnitz.
COMMONWEALTH OF AUSTRALIA Copyright Regulations 1969 WARNING This material has been reproduced and communicated to you by or on behalf of Monash University.
Prolog Programming (Volume 3) Dr W.F. Clocksin. Mapping: The Full Map sqlist(, ) sqlist([], []). sqlist([X|T], [Y|L]) :- Y is X * X, sqlist(T, L). List.
1 Introduction to Prolog References: – – Bratko, I., Prolog Programming.
ML: a quasi-functional language with strong typing Conventional syntax: - val x = 5; (*user input *) val x = 5: int (*system response*) - fun len lis =
Prolog Programming slides written by Dr W.F. Clocksin.
Patterns in ML functions. Formal vs. actual parameters Here's a function definition (in C): –int add (int x, int y) { return x + y; } –x and y are the.
1 Prolog III. 2 Lists [ ] is the empty list. [x, 2+2, [a, b, c]] is a list of three elements. The first element in the list is its “head”. The list with.
ML: a quasi-functional language with strong typing Conventional syntax: - val x = 5; (*user input *) val x = 5: int (*system response*) - fun len lis =
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 9: A closer look at terms Theory –Introduce the == predicate –Take a closer look at term structure.
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 5: Arithmetic Theory –Introduce Prolog`s built-in abilities for performing arithmetic –Apply.
28-Jun-15 Recursion. 2 Definitions I A recursive definition is a definition in which the thing being defined occurs as part of its own definition Example:
UNIVERSITY OF SOUTH CAROLINA Department of Computer Science and Engineering Lists, Operators, Arithmetic Notes for Ch.3 of Bratko For CSCE 580 Sp03 Marco.
1 Lecture 6 Logic Programming introduction to Prolog, facts, rules Ras Bodik Shaon Barman Thibaud Hottelier Hack Your Language! CS164: Introduction to.
30/09/04 AIPP Lecture 3: Recursion, Structures, and Lists1 Recursion, Structures, and Lists Artificial Intelligence Programming in Prolog Lecturer: Tim.
Chapter 9: Functional Programming in a Typed Language.
A Second Look At ML 1. Outline Patterns Local variable definitions A sorting example 2.
PROLOG SYNTAX AND MEANING Ivan Bratko University of Ljubljana Faculty of Computer and Info. Sc. Ljubljana, Slovenia.
Recursive Data Structures and Grammars  Themes  Recursive Description of Data Structures  Recursive Definitions of Properties of Data Structures  Recursive.
CS 326 Programming Languages, Concepts and Implementation Instructor: Mircea Nicolescu Lecture 21.
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 9: A closer look at terms Theory –Introduce the == predicate –Take a closer look at term structure.
Full Logic Programming. Data structures Pure LP allows only to represent relations (=predicates) To obtain full LP we will add functors (=function symbols)
Recursive Data Structures and Grammars  Themes  Recursive Description of Data Structures  Recursive Definitions of Properties of Data Structures  Recursive.
Simple Data structure and computation. Solving equation? sum(X,Y,Z):- Z is X+Y. ?sum(1,R,7). is/2: Arguments are not sufficiently instantiated ^ Exception:
Chapter SevenModern Programming Languages1 A Second Look At ML.
Prolog 3 Tests and Backtracking 1. Arithmetic Operators Operators for arithmetic and value comparisons are built-in to Prolog = always accessible / don’t.
07/10/04 AIPP Lecture 5: List Processing1 List Processing Artificial Intelligence Programming in Prolog Lecturer: Tim Smith Lecture 5 07/10/04.
Chapter 2 Syntax and meaning of prolog programs Part 1.
6/11/2016 Linear Resolution and Introduction to First Order Logic Michael Leuschel Softwaretechnik und Programmiersprachen Lecture 5.
More on Prolog syntax Already seen program statement types: Already seen program statement types: rules: p(X) :- q(X,Y), r(Y,z). rules: p(X) :- q(X,Y),
1 Recursive Data Structures CS 270 Math Foundations of CS Jeremy Johnson.
Section 16.5, 16.6 plus other references
CS589 Principles of DB Systems Spring 2014 Unit 2: Recursive Query Processing Lecture 2-1 – Naïve algorithm for recursive queries Lois Delcambre (slides.
CS 550 Programming Languages Jeremy Johnson
ML: a quasi-functional language with strong typing
Functional Programming Lecture 12 - more higher order functions
ML Again ( Chapter 7) Patterns Local variable definitions
Declarative Programming Techniques Accumulators (CTM 3. 4
CS 270 Math Foundations of CS Jeremy Johnson
Prolog Programming slides written by
Tests, Backtracking, and Recursion
Prolog fundamentals Module 14.2 COP4020 – Programming Language Concepts Dr. Manuel E. Bermudez.
Chapter 11 :: Logic Languages
Artificial Intelligence CS370D
Prolog Programming (Volume 3)
Prolog Lists.
Chapter 12 :: Logic Languages
Chapter 3: Prolog (Lists, Arithmetic, Operators)
CSCE 314: Programming Languages Dr. Dylan Shell
Chapter 12 :: Logic Languages
Programming Paradigms and Languages
Prolog III.
Prolog Lists.
Declarative Programming Techniques Accumulators (CTM 3. 4
Programming Techniques
Announcements Quiz 5 HW6 due October 23
Chapter 2 Syntax and meaning of prolog programs
Declarative Programming Techniques Accumulators (CTM 3. 4
Lisp.
Prolog III Lists 8-Jul-19.
Chapter 12 :: Logic Languages
PROLOG.
Presentation transcript:

Prolog Programming (Volume 2) Dr W.F. Clocksin

Lists Lists are the same as other languages (such as ML) in that a list of terms of any length is composed of list cells that are ‘consed’ together. The list of length 0 is called nil, written []. The list of length n is .(head,tail), where tail is a list of length n-1. So a list cell is a functor ‘.’ of arity 2. Its first component is the head, and the second component is the tail.

Examples of lists nil .(a, nil) .(a, .(b, nil) .(a, .(b, .(c, .(d, .(e. nil))))) .(a,b) (note this is a pair, not a proper list) .(a, X) (this might be a list, or might not!) .(a, .(b, nil)), .(c, nil))

They can be written as trees nil b nil a b a X a b c a a nil d b nil e nil

Prolog Syntax for Lists Nil is written []. The list consisting of n elements t1, t2, …,tn is written [t1, t2, …,tn]. .(X,Y) is written [X|Y] [X|[]] is written [X] The term .(a, .(b, .(c,Y))) is written [a,b,c|Y]. If Y is instantiated to [], then the term is a list, and can be written [a,b,c|[]] or simply [a,b,c].

Exercises Identify the heads and tails of these lists (if any): [a, b, c] [a] [] [[the, cat], sat] [[the, cardinal], [pulled, [off]], [each, [plum, coloured], shoe]

Exercises Identify the heads and tails of these lists (if any): a [b, c] [a] [] [[the, cat], sat] [[the, cardinal], [pulled, [off]], [each, [plum, coloured], shoe]

Exercises Identify the heads and tails of these lists (if any): [a, b, c] a [] [] [[the, cat], sat] [[the, cardinal], [pulled, [off]], [each, [plum, coloured], shoe]

Exercises Identify the heads and tails of these lists (if any): [a, b, c] [a] [] (not a list, so doesn’t have head and tail. nil is a constant) [[the, cat], sat] [[the, cardinal], [pulled, [off]], [each, [plum, coloured], shoe]

Exercises Identify the heads and tails of these lists (if any): [a, b, c] [a] [] [the, cat] [sat] [[the, cardinal], [pulled, [off]], [each, [plum, coloured], shoe]

Exercises Identify the heads and tails of these lists (if any): [a, b, c] [a] [] [[the, cat], sat] [the, cardinal] [pulled, [off]], [each, [plum, coloured], shoe]

Exercises For each pair of terms, determine whether they unify, and if so, to which terms are the variables instantiated? [X, Y, Z] [john, likes, fish] [cat] [X|Y] [X,Y|Z] [mary, likes, wine] (picture on next slide) [[the,Y]|Z] [[X,answer], [is, here]] [X, Y, X] [a, Z, Z] [[X], [Y], [X]] [[a], [X], [X]]

Remember A variable may be instantiated to any term. X Y Z mary likes wine [] [mary, likes, wine] [X,Y|Z]

Fun with Lists (Worksheet 5) /* member(Term, List) */ member(X, [X|T]). member(X, [H|T]) :- member(X, T). Examples: ?- member(john, [paul, john]). ?- member(X, [paul, john]). ?- member(joe, [marx, darwin, freud]). ?- member(foo, X).

Exercises Here is a mystery predicate. What does it do? mystery(X, A, B) :- member(X, A), member(X, B). ?- mystery(a, [b, c, a], [p, a, l]). ?- mystery(b, [b, l, u, e], [y, e, l, l, o, w]). ?- mystery(X, [r, a, p, i, d], [a, c, t, i, o, n]). ?- mystery(X, [w, a, l, n, u, t], [c, h, e, r, r, y]).

A Brief Diversion into Anonymous Variables /* member(Term, List) */ member(X, [X|T]). member(X, [H|T]) :- member(X, T). member(X, [X|_]). member(X, [_|T]) :- member(X, T). Notice T isn’t ‘used’ Notice H isn’t ‘used’

A Brief Diversion into Arithmetic The built-in predicate ‘is’ takes two arguments. It interprets its second as an arithmetic expression, and unifies it with the first. Also, ‘is’ is an infix operator. ?- X is 2 + 2 * 2. X = 6 ?- 10 is (2 * 0) + 2 << 4. no ?- 32 is (2 * 0) + 2 << 4. yes

is But ‘is’ cannot solve equations, so the expression must be ‘ground’ (contain no free variables. ?- Y is 2 * X. no ?- X is 15, Y is 2 * X. X = 15, Y= 30.

Worksheet 6: Length of a List /* length(List, Length) */ Naïve method: length([], 0). length([H|T], N) :- length(T, NT), N is NT + 1.

Worksheet 6 /* length(List, Length) */ Tail-recursive method: length(L, N) :- acc(L, 0, N). /* acc(List, Before, After) */ acc([], A, A). acc([H|T], A, N) :- A1 is A + 1, acc(T, A1, N).

Exercises ?- length([apple, pear], N). ?- length([alpha], 2). ?- length(L, 3). Modify length to give a procedure sum such that sum(L,N) succeeds if L is a list of integers and N is their sum.

Worksheet 7: Inner Product A list of n integers can be used to represent an n-vector (a point in n-dimensional space). Given two vectors a and b, the inner product (dot product) of a and b is defined As you might expect, there are naïve and tail-recursive ways to compute this.

Worksheet 7 The naïve method: inner([], [], 0). inner([A|As],[B|Bs],N) :- inner(As, Bs, Ns), N is Ns + (A * B).

Worksheet 7 Tail-recursive method: inner(A, B, N) :- dotaux(A, B, 0, N). dotaux([], [], V, V). dotaux([A|As],[B|Bs],N,Z) :- N1 is N + (A * B), dotaux(As, Bs, N1, Z).

Worksheet 8: Maximum of a List Tail-recursive method has a base case and two recursive cases: /* max(List, Accumulator, Result) */ max([], A, A). max([H|T], A, M) :- H > A, max(T, H, M). max([H|T], A, M) :- H =< A, max(T, A, M). How to initialise the accumulator?

Worksheet 8 maximum(L, M) :- max(L, -10000, M). Magic numbers are a bad idea. maximum(L, M) :- max(L, minint, M) Need to change definitions of arithmetic. maximum([H|T], M) :- max(T, H, M). And know that ?- maximum([],X) fails.

Worksheet 9 arc Here we have added a new arc from d to a. If you use the program from WS 4, some goals will cause an infinite loop. a(g, h). a(d, a). a(g, d). a(e, d). a(h, f). a(e, f). a(a, e). a(a, b). a(b, f). a(b, c). a(f, c). a b c d e f g h Keep a ‘trail’ of nodes visited so far. Visit only ‘legal’ nodes, not already on the trail. Represent the trail as an accumulator, an extra argument of path.

Worksheet 9 path(X, X, T). path(X, Y, T) :- a(X, Z), legal(Z, T), path(Z, Y, [Z|T]). legal(Z, []). legal(Z, [H|T]) :- Z \== H, legal(Z, T). Notice that legal is like the negation of member.