12 prolog part 2 - department of computer sciencecannata/cs345/class notes/12 prolog...dr. philip...

18
Dr. Philip Cannata 1 Programming Languages Logic Programming – Prolog Part 2

Upload: vuongtuong

Post on 02-Apr-2018

220 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: 12 Prolog Part 2 - Department of Computer Sciencecannata/cs345/Class Notes/12 Prolog...Dr. Philip Cannata 9 Oracle Sqldeveper This database is for this book. But, the book is old and

Dr. Philip Cannata 1

Programming Languages

Logic Programming – Prolog Part 2

Page 2: 12 Prolog Part 2 - Department of Computer Sciencecannata/cs345/Class Notes/12 Prolog...Dr. Philip Cannata 9 Oracle Sqldeveper This database is for this book. But, the book is old and

Dr. Philip Cannata 2

Standard Oracle emp / dept Database

Page 3: 12 Prolog Part 2 - Department of Computer Sciencecannata/cs345/Class Notes/12 Prolog...Dr. Philip Cannata 9 Oracle Sqldeveper This database is for this book. But, the book is old and

Dr. Philip Cannata 3

Oracle Sqldeveper

http://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/index.html

Page 4: 12 Prolog Part 2 - Department of Computer Sciencecannata/cs345/Class Notes/12 Prolog...Dr. Philip Cannata 9 Oracle Sqldeveper This database is for this book. But, the book is old and

Dr. Philip Cannata 4

Oracle Sqldeveper

Page 5: 12 Prolog Part 2 - Department of Computer Sciencecannata/cs345/Class Notes/12 Prolog...Dr. Philip Cannata 9 Oracle Sqldeveper This database is for this book. But, the book is old and

Dr. Philip Cannata 5

Oracle Sqldeveper

Page 6: 12 Prolog Part 2 - Department of Computer Sciencecannata/cs345/Class Notes/12 Prolog...Dr. Philip Cannata 9 Oracle Sqldeveper This database is for this book. But, the book is old and

Dr. Philip Cannata 6

Oracle Sqldeveper

Page 7: 12 Prolog Part 2 - Department of Computer Sciencecannata/cs345/Class Notes/12 Prolog...Dr. Philip Cannata 9 Oracle Sqldeveper This database is for this book. But, the book is old and

Dr. Philip Cannata 7

Oracle Sqldeveper

Cut and Paste this into here and press

Page 8: 12 Prolog Part 2 - Department of Computer Sciencecannata/cs345/Class Notes/12 Prolog...Dr. Philip Cannata 9 Oracle Sqldeveper This database is for this book. But, the book is old and

Dr. Philip Cannata 8

Oracle Sqldeveper

Page 9: 12 Prolog Part 2 - Department of Computer Sciencecannata/cs345/Class Notes/12 Prolog...Dr. Philip Cannata 9 Oracle Sqldeveper This database is for this book. But, the book is old and

Dr. Philip Cannata 9

Oracle Sqldeveper

This database is for this book. But, the book is old and assumes

you’re using sqlplus not sqldeveloper. So, ignore all of the formatting examples in the

book and just do the sql.

Page 10: 12 Prolog Part 2 - Department of Computer Sciencecannata/cs345/Class Notes/12 Prolog...Dr. Philip Cannata 9 Oracle Sqldeveper This database is for this book. But, the book is old and

Dr. Philip Cannata 10

emp(7839, king, president, 0, 17-nov-81, 5000, 0, 10).emp(7698, blake, manager, 7839, 01-may-81, 2850, 0, 30).emp(7782, clark, manager, 7839, 09-jun-81, 2450, 0, 10).emp(7566, jones, manager, 7839, 02-apr-81, 2975, 0, 20).emp(7788, scott, analyst, 7566, 09-dec-82, 3000, 0, 20).emp(7902, ford, analyst, 7566, 03-dec-81, 3000, 0, 20).emp(7369, smith, clerk, 7902, 17-dec-80, 800, 0, 20).emp(7499, allen, salesman, 7698, 20-feb-81, 1600, 300, 30).emp(7521, ward, salesman, 7698, 22-feb-81, 1250, 500, 30).emp(7654, martin, salesman, 7698, 28-sep-81, 1250, 1400, 30).emp(7844, turner, salesman, 7698, 08-sep-81, 1500, 0, 30).emp(7876, adams, clerk, 7788, 12-jan-83, 1100, 0, 20).emp(7900, james, clerk, 7698, 03-dec-81, 950, 0, 30).emp(7934, miller, clerk, 7782, 23-jan-82, 1300, 0, 10).

dept(10, accounting, new_york).dept(20, research, dallas).dept(30, sales, chicago).dept(40, operations, boston).

select 'emp(' || empno || ', ' || lower(ename) || ', ' || lower(job) || ', ' || nvl(mgr, 0) || ', ' || lower(hiredate) || ', ' || sal || ', ' || nvl(comm, 0) || ', ' || deptno || ').' from emp

select 'dept(' || deptno || ', ' || lower(dname) || ', ' || lower(loc) || ').' from dept

emp / dept Database in Prolog

Page 11: 12 Prolog Part 2 - Department of Computer Sciencecannata/cs345/Class Notes/12 Prolog...Dr. Philip Cannata 9 Oracle Sqldeveper This database is for this book. But, the book is old and

Dr. Philip Cannata 11

Haskell> [(empno, ename, job, sal, deptno) | (empno, ename, job, _, _, sal, deptno) <- emp]

| ?- emp(Empno, Ename, Job, _, _, Sal, _, Deptno).

Deptno = 10Empno = 7839Ename = kingJob = presidentSal = 5000 ? ;

Deptno = 30Empno = 7698Ename = blakeJob = managerSal = 2850 ?

. . .

emp / dept Database in Prolog

Page 12: 12 Prolog Part 2 - Department of Computer Sciencecannata/cs345/Class Notes/12 Prolog...Dr. Philip Cannata 9 Oracle Sqldeveper This database is for this book. But, the book is old and

Dr. Philip Cannata 12

Haskell> [(empno, ename, job, sal, deptno) | (empno, ename, job, _, _, sal, deptno) <- emp, deptno == 10]

| ?- emp(Empno, Ename, Job, _, _, Sal, _, 10).

Empno = 7839Ename = kingJob = presidentSal = 5000 ? ;

Empno = 7782Ename = clarkJob = managerSal = 2450 ? ;

Empno = 7934Ename = millerJob = clerkSal = 1300

yes| ?-

emp / dept Database in Prolog

Page 13: 12 Prolog Part 2 - Department of Computer Sciencecannata/cs345/Class Notes/12 Prolog...Dr. Philip Cannata 9 Oracle Sqldeveper This database is for this book. But, the book is old and

Dr. Philip Cannata 13

Main> [(empno, ename, job, sal, dname) | (empno, ename, job, _, _, sal, edeptno) <- emp, (deptno, dname, loc) <- dept, edeptno == deptno ]

| ?- emp(Empno, Ename, Job, _, _, Sal, _, D), dept(D, Dname, _).

D = 10Dname = accountingEmpno = 7839Ename = kingJob = presidentSal = 5000 ? ;

D = 30Dname = salesEmpno = 7698Ename = blakeJob = managerSal = 2850 ? ;

D = 10Dname = accountingEmpno = 7782Ename = clarkJob = managerSal = 2450 ?

emp / dept Database in Prolog

Page 14: 12 Prolog Part 2 - Department of Computer Sciencecannata/cs345/Class Notes/12 Prolog...Dr. Philip Cannata 9 Oracle Sqldeveper This database is for this book. But, the book is old and

Dr. Philip Cannata 14

ename(7839, king).ename(7698, blake).ename(7782, clark).ename(7566, jones).ename(7788, scott).ename(7902, ford).ename(7369, smith).ename(7499, allen).ename(7521, ward).ename(7654, martin).ename(7844, turner).ename(7876, adams).ename(7900, james).ename(7934, miller).

job(7839, president).job(7698, manager).job(7782, manager).job(7566, manager).job(7788, analyst).job(7902, analyst).job(7369, clerk).job(7499, salesman).job(7521, salesman).job(7654, salesman).job(7844, salesman).job(7876, clerk).job(7900, clerk).job(7934, clerk).

hiredate(7839, 17-nov-81).hiredate(7698, 01-may-81).hiredate(7782, 09-jun-81).hiredate(7566, 02-apr-81).hiredate(7788, 09-dec-82).hiredate(7902, 03-dec-81).hiredate(7369, 17-dec-80).hiredate(7499, 20-feb-81).hiredate(7521, 22-feb-81).hiredate(7654, 28-sep-81).hiredate(7844, 08-sep-81).hiredate(7876, 12-jan-83).hiredate(7900, 03-dec-81).hiredate(7934, 23-jan-82).

salary(7839, 5000).salary(7698, 2850).salary(7782, 2450).salary(7566, 2975).salary(7788, 3000).salary(7902, 3000).salary(7369, 800).salary(7499, 1600).salary(7521, 1250).salary(7654, 1250).salary(7844, 1500).salary(7876, 1100).salary(7900, 950).salary(7934, 1300).

mgr(7839, 0).mgr(7698, 7839).mgr(7782, 7839).mgr(7566, 7839).mgr(7788, 7566).mgr(7902, 7566).mgr(7369, 7902).mgr(7499, 7698).mgr(7521, 7698).mgr(7654, 7698).mgr(7844, 7698).mgr(7876, 7788).mgr(7900, 7698).mgr(7934, 7782).

deptno(7839, 10).deptno(7698, 30).deptno(7782, 10).deptno(7566, 20).deptno(7788, 20).deptno(7902, 20).deptno(7369, 20).deptno(7499, 30).deptno(7521, 30).deptno(7654, 30).deptno(7844, 30).deptno(7876, 20).deptno(7900, 30).deptno(7934, 10).

emp / dept Database in Prolog as Binary Relations (Triple Store)

Page 15: 12 Prolog Part 2 - Department of Computer Sciencecannata/cs345/Class Notes/12 Prolog...Dr. Philip Cannata 9 Oracle Sqldeveper This database is for this book. But, the book is old and

Dr. Philip Cannata 15

Haskell> [(empno, ename, job, sal, deptno) |(x0, empno) <- empno, (x1, ename) <- ename, (x2, job) <- job,(x3, sal) <- sal, (x4, deptno) <- deptno, x0 == x1 && x1 == x2 && x2 == x3 && x3 == x4]

| ?- ename(E, Ename), job(E, Job), salary(E, Salary), deptno(E, Deptno).

Deptno = 10E = 7839Ename = kingJob = presidentSalary = 5000 ? ;

Deptno = 30E = 7698Ename = blakeJob = managerSalary = 2850 ? ;

Deptno = 10E = 7782Ename = clarkJob = managerSalary = 2450 ?

emp / dept Database in Prolog as Binary Relations (Triple Store)

Page 16: 12 Prolog Part 2 - Department of Computer Sciencecannata/cs345/Class Notes/12 Prolog...Dr. Philip Cannata 9 Oracle Sqldeveper This database is for this book. But, the book is old and

Dr. Philip Cannata 16

name = [ (7839, "KING"), (7698, "BLAKE"), (7782, "CLARK"), (7566, "JONES"), (7788, "SCOTT"), (7902, "FORD"), (7369, "SMITH"), (7499, "ALLEN"), (7521, "WARD"), (7654, "MARTIN"), (7844, "TURNER"), (7876, "ADAMS"), (7900, "JAMES"), (7934, "MILLER") ]

name(7839, KING).name(7698, BLAKE).name(7782, CLARK).name(7566, JONES).name(7788, SCOTT).name(7902, FORD).name(7369, SMITH).name(7499, ALLEN).name(7521, WARD).name(7654, MARTIN).name(7844, TURNER).name(7876, ADAMS).name(7900, JAMES).name(7934, MILLER).

(7839, name, KING)(7698, name, BLAKE)(7782, name, CLARK)(7566, name, JONES)(7788, name, SCOTT)(7902, name, FORD)(7369, name, SMITH)(7499, name, ALLEN)(7521, name, WARD)(7654, name, MARTIN)(7844, name, TURNER)(7876, name, ADAMS)(7900, name, JAMES)(7934, name, MILLER)

These are all the same relation

Haskell Prolog RDF *

* seeAlso called Predicates( Predicate Logic – the

science of correct thinking. )

Also called a triple store.

Also a form of a graph.

Page 17: 12 Prolog Part 2 - Department of Computer Sciencecannata/cs345/Class Notes/12 Prolog...Dr. Philip Cannata 9 Oracle Sqldeveper This database is for this book. But, the book is old and

Dr. Philip Cannata 17

Page 18: 12 Prolog Part 2 - Department of Computer Sciencecannata/cs345/Class Notes/12 Prolog...Dr. Philip Cannata 9 Oracle Sqldeveper This database is for this book. But, the book is old and

Dr. Philip Cannata 18