Programming Languages

18
Dr. Philip Cannata Programming Languages Prolog Part 3 SQL & Prolog

description

Programming Languages. Prolog Part 3 SQL & Prolog. Good question from a student: what does the following mean? married (mrAstor, mrsAstor). Cross Product of mrAstor, mrsAstor, mrBlake, mrsBlake, mrCrane, mrsCrane, mrDavis, mrsDavis - PowerPoint PPT Presentation

Transcript of Programming Languages

Page 1: Programming Languages

Dr. Philip Cannata 1

Programming Languages

Prolog Part 3

SQL & Prolog

Page 2: Programming Languages

Dr. Philip Cannata 2

Good question from a student: what does the following mean?

married (mrAstor, mrsAstor).

Cross Product of mrAstor, mrsAstor, mrBlake, mrsBlake, mrCrane, mrsCrane, mrDavis, mrsDavis

(mrAstor, mrAstor) (mrAstor, mrsAstor) (mrsAstor, mrAstor) (mrsAstor, MrsAstor) (mrAstor, mrBlake) (mrAstor, mrsBlake) (mrsAstor, mrBlake) (mrsAstor, MrsBlake) (mrAstor, mrCrane) (mrAstor, mrsCrane) (mrsAstor, mrCrane) (mrsAstor, MrsCrane) (mrAstor, mrDavis) (mrAstor, mrsDavis) (mrsAstor, mrDavis) (mrsAstor, MrsDavis)

(mrBlake, mrAstor) (mrBlake, mrsAstor) (mrsBlake, mrAstor) (mrsBlake, MrsAstor) (mrBlake, mrBlake) (mrBlake, mrsBlake) (mrsBlake, mrBlake) (mrsBlake, MrsBlake) (mrBlake, mrCrane) (mrBlake, mrsCrane) (mrsBlake, mrCrane) (mrsBlake, MrsCrane) (mrBlake, mrDavis) (mrBlake, mrsDavis) (mrsBlake, mrDavis) (mrsBlake, MrsDavis)

(mrCrane, mrAstor) (mrCrane, mrsAstor) (mrsCrane, mrAstor) (mrsCrane, MrsAstor) (mrCrane, mrBlake) (mrCrane, mrsBlake) (mrsCrane, mrBlake) (mrsCrane, MrsBlake) (mrCrane, mrCrane) (mrCrane, mrsCrane) (mrsCrane, mrCrane) (mrsCrane, MrsCrane) (mrCrane, mrDavis) (mrCrane, mrsDavis) (mrsCrane, mrDavis) (mrsCrane, MrsDavis)

(mrDavis, mrAstor) (mrDavis, mrsAstor) (mrsDavis, mrAstor) (mrsDavis, MrsAstor) (mrDavis, mrBlake) (mrDavis, mrsBlake) (mrsDavis, mrBlake) (mrsDavis, MrsBlake) (mrDavis, mrCrane) (mrDavis, mrsCrane) (mrsDavis, mrCrane) (mrsDavis, MrsCrane) (mrDavis, mrDavis) (mrDavis, mrsDavis) (mrsDavis, mrDavis) (mrsDavis, MrsDavis)

Page 3: Programming Languages

Dr. Philip Cannata 3

Good question from last class. What does the following mean?

married (mrAstor, mrsAstor).

married subset (Relation) of Cross Product of mrAstor, mrsAstor, mrBlake, mrsBlake, mrCrane, mrsCrane, mrDavis, mrsDavis

(mrAstor, mrAstor) (mrAstor, mrsAstor) (mrsAstor, mrAstor) (mrsAstor, MrsAstor) (mrAstor, mrBlake) (mrAstor, mrsBlake) (mrsAstor, mrBlake) (mrsAstor, MrsBlake) (mrAstor, mrCrane) (mrAstor, mrsCrane) (mrsAstor, mrCrane) (mrsAstor, MrsCrane) (mrAstor, mrDavis) (mrAstor, mrsDavis) (mrsAstor, mrDavis) (mrsAstor, MrsDavis)

(mrBlake, mrAstor) (mrBlake, mrsAstor) (mrsBlake, mrAstor) (mrsBlake, MrsAstor) (mrBlake, mrBlake) (mrBlake, mrsBlake) (mrsBlake, mrBlake) (mrsBlake, MrsBlake) (mrBlake, mrCrane) (mrBlake, mrsCrane) (mrsBlake, mrCrane) (mrsBlake, MrsCrane) (mrBlake, mrDavis) (mrBlake, mrsDavis) (mrsBlake, mrDavis) (mrsBlake, MrsDavis)

(mrCrane, mrAstor) (mrCrane, mrsAstor) (mrsCrane, mrAstor) (mrsCrane, MrsAstor) (mrCrane, mrBlake) (mrCrane, mrsBlake) (mrsCrane, mrBlake) (mrsCrane, MrsBlake) (mrCrane, mrCrane) (mrCrane, mrsCrane) (mrsCrane, mrCrane) (mrsCrane, MrsCrane) (mrCrane, mrDavis) (mrCrane, mrsDavis) (mrsCrane, mrDavis) (mrsCrane, MrsDavis)

(mrDavis, mrAstor) (mrDavis, mrsAstor) (mrsDavis, mrAstor) (mrsDavis, MrsAstor) (mrDavis, mrBlake) (mrDavis, mrsBlake) (mrsDavis, mrBlake) (mrsDavis, MrsBlake) (mrDavis, mrCrane) (mrDavis, mrsCrane) (mrsDavis, mrCrane) (mrsDavis, MrsCrane) (mrDavis, mrDavis) (mrDavis, mrsDavis) (mrsDavis, mrDavis) (mrsDavis, MrsDavis)

Page 4: Programming Languages

Dr. Philip Cannata 4

Standard Oracle emp / dept Database

Page 5: Programming Languages

Dr. Philip Cannata 5

Oracle Sqldeveper

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

Page 6: Programming Languages

Dr. Philip Cannata 6

Oracle Sqldeveper

Page 7: Programming Languages

Dr. Philip Cannata 7

Oracle Sqldeveper

Page 8: Programming Languages

Dr. Philip Cannata 8

Oracle Sqldeveper

Page 9: Programming Languages

Dr. Philip Cannata 9

Oracle Sqldeveper

Cut and Paste this into here and press

Page 10: Programming Languages

Dr. Philip Cannata 10

Oracle Sqldeveper

Page 11: Programming Languages

Dr. Philip Cannata 11

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 12: Programming Languages

Dr. Philip Cannata 12

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 13: Programming Languages

Dr. Philip Cannata 13

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 14: Programming Languages

Dr. Philip Cannata 14

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 15: Programming Languages

Dr. Philip Cannata 15

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 16: Programming Languages

Dr. Philip Cannata 16

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 17: Programming Languages

Dr. Philip Cannata 17

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 18: Programming Languages

Dr. Philip Cannata 18

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.