Carlos Varela Rensselaer Polytechnic Institute November 28, 2017

Slides:



Advertisements
Similar presentations
Prolog Nonmonotonic logic.
Advertisements

Chapter 11 :: Logic Languages
C. Varela; Adapted w/permission from S. Haridi and P. Van Roy1 Declarative Programming Techniques Accumulators, Difference Lists (VRH ) Carlos Varela.
Introduction to PROLOG ME 409 Lab - 1. Introduction to PROLOG.
COP4020 Programming Languages
TCP1211-Logic Programming Control and Side Effects Programming Faculty of Information Technology Multimedia University.
C. Varela; Adapted w/permission from S. Haridi and P. Van Roy1 Declarative Computation Model Single assignment store Kernel language syntax Carlos Varela.
Chapter 5: Loops and Files.
Carlos Varela Rennselaer Polytechnic Institute September 10, 2007
C. Varela1 Logic Programming (PLP 11.3) Prolog Imperative Control Flow: Backtracking Cut, Fail, Not Carlos Varela Rennselaer Polytechnic Institute September.
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 9: A closer look at terms Theory –Introduce the == predicate –Take a closer look at term structure.
1 Expressions, Operators Expressions Operators and Precedence Reading for this class: L&L, 2.4.
C++ Programming Language Day 1. What this course covers Day 1 – Structure of C++ program – Basic data types – Standard input, output streams – Selection.
Expressions, Data Conversion, and Input
P-Phunck - Prolog1 Introduction to Prolog Brian Paden.
Copyright © 2009 Elsevier Chapter 11 :: Logic Languages Programming Language Pragmatics Michael L. Scott.
1 Lab Session-III CSIT-120 Fall 2000 Revising Previous session Data input and output While loop Exercise Limits and Bounds Session III-B (starts on slide.
1 Lecture Expert Systems &. 2 Operator Notation A programmer can define new operators by inserting into the program special kinds of clauses,
More on Logic Today we look at the for loop and then put all of this together to look at some more complex forms of logic that a program will need The.
Ch. 13 Ch. 131 jcmt CSE 3302 Programming Languages CSE3302 Programming Languages (notes?) Dr. Carter Tiernan.
Operators in Prolog © Patrick Blackburn, Johan Bos & Kristina Striegnitz.
C. Varela1 Logic Programming Prolog: Arithmetic, Equalities, Operators, I/O. (PLP 11) Databases: assert, retract. (CTM 9.6) Carlos Varela Rennselaer Polytechnic.
Loops and Files. 5.1 The Increment and Decrement Operators.
C. Varela1 Logic Programming (PLP 11, CTM 9.1) Terms, Resolution, Unification, Search, Backtracking (Prolog) Relational Computation Model (Oz) Carlos Varela.
Prolog 3 Tests and Backtracking 1. Arithmetic Operators Operators for arithmetic and value comparisons are built-in to Prolog = always accessible / don’t.
C. Varela1 Logic Programming (CTM ) Constraint Programming: Constraints and Computation Spaces Carlos Varela Rennselaer Polytechnic Institute.
More on Logic Today we look at the for loop and then put all of this together to look at some more complex forms of logic that a program will need The.
Chapter Three: Operators, Arithmetic 1. Chapter three: 3.3Operator notation 3.4Arithmetic 2.
C. Varela1 Logic Programming (PLP 11, CTM 9.3) Prolog Imperative Control Flow: Backtracking, Cut, Fail, Not Lists, Append Carlos Varela Rennselaer Polytechnic.
1 Lecture 16: Prolog’s Lists, Negation and Imperative Control Flow (Section 11.3) CSCI 431 Programming Languages Fall 2002 A modification of slides developed.
Section 16.5, 16.6 plus other references
Carlos Varela Rennselaer Polytechnic Institute November 18, 2016
Chapter 2: Lambda Calculus
Computing and Statistical Data Analysis Lecture 2
Chapter 12 :: Logic Languages
PROGRAMMING IN HASKELL
Carlos Varela Rennselaer Polytechnic Institute November 11, 2016
Computing Fundamentals
Debugging and Random Numbers
Lesson 5 Functions I A function is a small program which accomplishes a specific task. For example, we invoke (call) the function, sqrt(x), in the library.
Chapter 12 :: Logic Languages
Carlos Varela Rensselaer Polytechnic Institute November 17, 2017
Carlos Varela Rensselaer Polytechnic Institute November 21, 2017
Chapter 5: Loops and Files.
Carlos Varela Rensselaer Polytechnic Institute December 5, 2017
Structural testing, Path Testing
Scripts & Functions Scripts and functions are contained in .m-files
PROLOG.
Carlos Varela Rensselaer Polytechnic Institute November 14, 2017
Carlos Varela Rennselaer Polytechnic Institute December 6, 2016
Carlos Varela Rensselaer Polytechnic Institute December 8, 2017
Declarative Computation Model Kernel language semantics (Non-)Suspendable statements (VRH ) Carlos Varela RPI October 11, 2007 Adapted with.
Problem Solving and Programming CS140: Introduction to Computing 1 8/21/13.
Artificial Intelligence CS370D
Introduction to Programming
CS 3304 Comparative Languages
Introduction to C++ Programming
Chapter 8: Advanced Pattern Matching
Programming Funamental slides
Introduction to TouchDevelop
Chapter 3: Prolog (Lists, Arithmetic, Operators)
Python Primer 1: Types and Operators
Programming Techniques
Declarative Computation Model Single assignment store (VRH 2
Carlos Varela Rennselaer Polytechnic Institute November 22, 2016
Chapter 2 Syntax and meaning of prolog programs
Carlos Varela Rennselaer Polytechnic Institute November 15, 2016
The IF Revisited A few more things Copyright © Curt Hill.
Unit II Game Playing.
Presentation transcript:

Carlos Varela Rensselaer Polytechnic Institute November 28, 2017 Logic Programming Prolog: Arithmetic, Equalities, Operators, I/O. (PLP 11) Databases: assert, retract. (CTM 9.6) Carlos Varela Rensselaer Polytechnic Institute November 28, 2017 C. Varela

Arithmetic Goals N>M N<M N=<M N>=M N and M must be bound to numbers for these tests to succeed or fail. X is 1+2 is used to assign numeric value of right-hand-side to variable in left-hand-side. C. Varela

Loop Revisited natural(1). natural(N) :- natural(M), N is M+1. my_loop(N) :- N>0, natural(I), write(I), nl, I=N, !. my_loop(_). Also called generate-and-test. C. Varela

= is not equal to == or =:= X=Y X\=Y test whether X and Y can be or cannot be unified. X==Y X\==Y test whether X and Y are currently co-bound, i.e., have been bound to, or share the same value. X=:=Y X=\=Y test arithmetic equality and inequality. C. Varela

More equalities X=@=Y X\=@=Y test whether X and Y are structurally identical. =@= is weaker than == but stronger than =. Examples: a=@=A false A=@=B true x(A,A)=@=x(B,C) false x(A,A)=@=x(B,B) true x(A,B)=@=x(C,D) true C. Varela

More on equalities X==Y  X=@=Y  X=Y but not the other way (). If two terms are currently co-bound, they are structurally identical, and therefore they can unify. Examples: a=@=A false A=@=B true x(A,A)=@=x(B,C) false x(A,A)=@=x(B,B) true x(A,B)=@=x(C,D) true C. Varela

Prolog Operators :- op(P,T,O) declares an operator symbol O with precedence P and type T. Example: :- op(500,xfx,’has_color’) a has_color red. b has_color blue. then: ?- b has_color C. C = blue. ?- What has_color red. What = a. C. Varela

Operator precedence/type Precendence P is an integer: the larger the number, the less the precedence (ability to group). Type T is one of: T Position Associativity Examples xfx Infix Non-associative is xfy Right-associative , ; yfx Left-associative + - * / fx Prefix ?- fy xf Postfix yf C. Varela

Testing types atom(X) tests whether X is an atom, e.g., ‘foo’, bar. integer(X) tests whether X is an integer; it does not test for complex terms, e.g., integer(4/2) fails. float(X) tests whether X is a float; it matches exact type. string(X) tests whether X is a string, enclosed in `` … ``. C. Varela

Prolog Input seeing(X) succeeds if X is (or can be) bound to current read port. X = user is keyboard (standard input.) see(X) opens port for input file bound to X, and makes it current. seen closes current port for input file, and makes user current. read(X) reads Prolog type expression from current port, storing value in X. end-of-file is returned by read at <end-of-file>. C. Varela

Prolog Output telling(X) succeeds if X is (or can be) bound to current output port. X = user is screen (standard output.) tell(X) opens port for output file bound to X, and makes it current. told closes current output port, and reverses to screen output (makes user current.) write(X) writes Prolog expression bound to X into current output port. nl new line (line feed). tab(N) writes N spaces to current output port. C. Varela

I/O Example browse(File) :- seeing(Old), /* save for later */ see(File), /* open this file */ repeat, read(Data), /* read from File */ process(Data), seen, /* close File */ see(Old), /* prev read source */ !. /* stop now */ process(end_of_file) :- !. process(Data) :- write(Data), nl, fail. C. Varela

First-Class Terms Revisited call(P) Invoke predicate as a goal. assert(P) Adds predicate to database. retract(P) Removes predicate from database. functor(T,F,A) Succeeds if T is a term with functor F and arity A. findall(F,P,L) Returns a list L with all elements F satisfying predicate P clause(H,B) Succeeds if the clause H :- B can be found in the database. C. Varela

Databases: assert and retract Prolog enables direct modification of its knowledge base using assert and retract. Let us consider a tic-tac-toe game: We can represent a board with facts x(n) and o(n), for n in {1..9} corresponding to each player’s moves. As a player (or the computer) moves, a fact is dynamically added to Prolog’s knowledge base. 1 2 3 4 5 6 7 8 9 C. Varela

Databases: assert and retract % main goal: play :- clear, repeat, getmove, respond. getmove :- repeat, write('Please enter a move: '), read(X), empty(X), assert(o(X)). respond :- makemove, printboard, done. makemove :- move(X), !, assert(x(X)). makemove :- all_full. clear :- retractall(x(_)), retractall(o(_)). Human move Computer move C. Varela

Tic-tac-toe: Strategy The strategy is to first try to win, then try to block a win, then try to create a split (forced win in the next move), then try to prevent opponent from building three in a row, and creating a split, finally choose center, corners, and other empty squares. The order of the rules is key to implementing the strategy. move(A) :- good(A), empty(A), !. good(A) :- win(A). good(A) :- block_win(A). good(A) :- split(A). good(A) :- strong_build(A). good(A) :- weak_build(A). good(5). good(1). good(3). good(7). good(9). good(2). good(4). good(6). good(8). C. Varela

Tic-tac-toe: Strategy(2) X Moving x(8) produces a split: x(2) or x(7) wins in next move. win(A) :- x(B), x(C), line(A,B,C). block_win(A):- o(B), o(C), line(A,B,C). split(A) :- x(B), x(C), different(B,C), line(A,B,D), line(A,C,E), empty(D), empty(E). strong_build(A) :- x(B), line(A,B,C), empty(C), not(risky(C)). weak_build(A) :- x(B), line(A,B,C), empty(C), not(double_risky(C)). risky(C) :- o(D), line(C,D,E), empty(E). double_risky(C) :- o(D), o(E), different(D,E), line(C,D,F), line(C,E,G), empty(F), empty(G). C. Varela

Databases in Oz: RelationClass Oz supports dynamic database modifications using a RelationClass. The initial relation is defined as follows: Rel = {New RelationClass init} Once we have a relation instance, the following operations are possible: {Rel assert(T)} adds tuple T to Rel. {Rel assertall(Ts)} adds the list of tuples Ts to Rel. {Rel query(X)} binds X to one of the tuples in Rel. X can be any partial value. If more than one tuple is compatible with X, then search can enumerate all of them. C. Varela

Databases in Oz: An example c d e f GraphRel = {New RelationClass init} {GraphRel assertall([edge(a b) edge(b c) edge(c d) edge(d e) edge(b e) edge(d f)])} proc {EdgeP A B} {GraphRel query(edge(A B))} end {Browse {Search.base.all proc {$ X} {EdgeP b X} end}} % displays all edges from node b: [c e] C. Varela

Databases in Oz: An example(2) proc {Path X Y} choice X = Y [] Z in {EdgeP Z Y} {Path X Z} end {Browse {Search.base.all proc {$ X} {Path b X} end}} % displays all nodes with a path from node b: [b c e e f d] C. Varela

Exercises The Prolog predicate my_loop/1 can succeed or fail as a goal. Explain why you may want a predicate to succeed, or fail depending on its expected calling context. CTM Exercise 9.8.1 (page 671). Do it both in Prolog and Oz. PLP Exercise 11.7 (page 571), in Oz. Develop a tic-tac-toe game in Oz. C. Varela