cs 403: programming languages lecture 18 fall 2003 department of computer science university of...
TRANSCRIPT
![Page 1: CS 403: Programming Languages Lecture 18 Fall 2003 Department of Computer Science University of Alabama Joel Jones](https://reader030.vdocuments.us/reader030/viewer/2022033106/5697c01a1a28abf838ccecf6/html5/thumbnails/1.jpg)
QuickTime™ and aTIFF (Uncompressed) decompressorare needed to see this picture.
CS 403: Programming Languages
Lecture 18
Fall 2003
Department of Computer Science
University of Alabama
Joel Jones
![Page 2: CS 403: Programming Languages Lecture 18 Fall 2003 Department of Computer Science University of Alabama Joel Jones](https://reader030.vdocuments.us/reader030/viewer/2022033106/5697c01a1a28abf838ccecf6/html5/thumbnails/2.jpg)
Lecture 18 2
QuickTime™ and aTIFF (Uncompressed) decompressorare needed to see this picture.
Overview
Announcements Talk this afternoon at 5PM Story Hour, Houser 108, 3PM Friday
![Page 3: CS 403: Programming Languages Lecture 18 Fall 2003 Department of Computer Science University of Alabama Joel Jones](https://reader030.vdocuments.us/reader030/viewer/2022033106/5697c01a1a28abf838ccecf6/html5/thumbnails/3.jpg)
Lecture 18 3
QuickTime™ and aTIFF (Uncompressed) decompressorare needed to see this picture.
Ruby: why use it?Courtney Hickey
Ruby is designed to make programming easy and fun. It allows you to concentrate on the creative side of programming.
It is a general purpose programming language. It is easy to extend, whether it be from within the language or by
linking in third party libraries. It is portable across a number of platforms. It is lightweight and consumes little system resources. Like smalltalk it requires less code, therefore it has fewer syntax
error and fewer bugs. Finally, it is easy to learn.
![Page 4: CS 403: Programming Languages Lecture 18 Fall 2003 Department of Computer Science University of Alabama Joel Jones](https://reader030.vdocuments.us/reader030/viewer/2022033106/5697c01a1a28abf838ccecf6/html5/thumbnails/4.jpg)
Lecture 18 4
QuickTime™ and aTIFF (Uncompressed) decompressorare needed to see this picture.
Ruby Basics
Ruby is an object-oriented language. Everything you manipulate is an object as well as the results of the manipulations.
It has clean syntax. It has no semicolons as long as each statement is on a new
line. It’s comments start with an “#”.
Methods are defined with def, then the method name and method parameters which are inside parentheses.
It uses the keyword “end”, there are no {‘s here.
![Page 5: CS 403: Programming Languages Lecture 18 Fall 2003 Department of Computer Science University of Alabama Joel Jones](https://reader030.vdocuments.us/reader030/viewer/2022033106/5697c01a1a28abf838ccecf6/html5/thumbnails/5.jpg)
Lecture 18 5
QuickTime™ and aTIFF (Uncompressed) decompressorare needed to see this picture.
My wonderful fantastic code The function starts by concatenating Goodnight
with name, assigns it to result, then returns result.
You will notice you do not have to declare result. It just magically appears when you assign something to it.
There are no {‘s either we end a function with the keyword “end” as mentioned before.
The “puts” before the function call will print the return objected to the screen and an end of line character.
![Page 6: CS 403: Programming Languages Lecture 18 Fall 2003 Department of Computer Science University of Alabama Joel Jones](https://reader030.vdocuments.us/reader030/viewer/2022033106/5697c01a1a28abf838ccecf6/html5/thumbnails/6.jpg)
Lecture 18 6
QuickTime™ and aTIFF (Uncompressed) decompressorare needed to see this picture.
Prolog Notation A rule: X [p(X) (q(X) r(X))] is written as p(X) q(X), r(X). Prolog conventions:
variables begin with upper case (A, B, X, Y, Big, Small, ACE) constants begin with lower case (a, b, x, y, plato, aristotle)
Query = list of facts with variables, e.g. mortal(X) sorted([5,3,4,9,2], X) sonOf(martha,S), sonOf(george,S)
Prolog program = facts+rules+query
![Page 7: CS 403: Programming Languages Lecture 18 Fall 2003 Department of Computer Science University of Alabama Joel Jones](https://reader030.vdocuments.us/reader030/viewer/2022033106/5697c01a1a28abf838ccecf6/html5/thumbnails/7.jpg)
Lecture 18 7
QuickTime™ and aTIFF (Uncompressed) decompressorare needed to see this picture.
Prolog Syntax < fact > < term > . < rule > < term > :- < terms > . < query > < terms > .
< term > < number > | < atom > | <variable>
| < atom > ( < terms > )
< terms > < term > | < term > , < terms >
![Page 8: CS 403: Programming Languages Lecture 18 Fall 2003 Department of Computer Science University of Alabama Joel Jones](https://reader030.vdocuments.us/reader030/viewer/2022033106/5697c01a1a28abf838ccecf6/html5/thumbnails/8.jpg)
Lecture 18 8
QuickTime™ and aTIFF (Uncompressed) decompressorare needed to see this picture.
Constructors like student and “.” are called functors in Prolog
Constructors like student and “.” are called functors in Prolog
Syntax Integers Atoms: user defined, supplied
name starts with lower case: john, student2 Variables
begin with upper case: Who, X ‘_’ can be used in place of variable name
Structures student(ali, freshman, 194).
Lists [x, y, Z ] [ Head | Tail ]
• syntactic sugar for . ( Head, Tail ) [ ]
![Page 9: CS 403: Programming Languages Lecture 18 Fall 2003 Department of Computer Science University of Alabama Joel Jones](https://reader030.vdocuments.us/reader030/viewer/2022033106/5697c01a1a28abf838ccecf6/html5/thumbnails/9.jpg)
Lecture 18 9
QuickTime™ and aTIFF (Uncompressed) decompressorare needed to see this picture.
Prolog Introduction /* list of facts in prolog, stored in an ascii file,
‘family.pl’*/ mother(mary, ann). mother(mary, joe). mother(sue, marY ).
father(mike, ann). father(mike, joe).
grandparent(sue, ann).
![Page 10: CS 403: Programming Languages Lecture 18 Fall 2003 Department of Computer Science University of Alabama Joel Jones](https://reader030.vdocuments.us/reader030/viewer/2022033106/5697c01a1a28abf838ccecf6/html5/thumbnails/10.jpg)
Lecture 18 10
QuickTime™ and aTIFF (Uncompressed) decompressorare needed to see this picture.
Prolog Introduction (cont.) /* reading the facts from a file */ ?- consult ( family). %family compiled, 0.00 sec, 828 bytes
Comments are either bound by “/*”,”*/” or any characters following the “%”.
Structures are just relationships. There are no inputs or outputs for the variables of the structures.
The swipl documentation of the built-in predicates does indicate how the variables should be used. pred(+var1, -var2, +var3).
• + indicates input variable• - indicates output variable
![Page 11: CS 403: Programming Languages Lecture 18 Fall 2003 Department of Computer Science University of Alabama Joel Jones](https://reader030.vdocuments.us/reader030/viewer/2022033106/5697c01a1a28abf838ccecf6/html5/thumbnails/11.jpg)
/* Prolog the order of the facts and rules is the order it is searched in *//* Variation from pure logic model */
2 ?- father( X, Y ).
X = mike /* italics represents computer output */Y = ann ; /* I type ‘;’ to continue searching the data base */
X = mikeY = joe ;
no
3 ?- father( X, joe).
X = mike ;
no
![Page 12: CS 403: Programming Languages Lecture 18 Fall 2003 Department of Computer Science University of Alabama Joel Jones](https://reader030.vdocuments.us/reader030/viewer/2022033106/5697c01a1a28abf838ccecf6/html5/thumbnails/12.jpg)
Lecture 18 12
QuickTime™ and aTIFF (Uncompressed) decompressorare needed to see this picture.
Rulesparent( X , Y ) :– mother( X , Y ). /* If mother( X ,Y ) then parent( X ,Y ) */
parent( X , Y ) :– father( X , Y ).
/* Note: grandparent(sue, ann). redundant */
/* if parent( X ,Y ) and parent(Y,Z ) then grandparent( X ,Z ). */
Pair Up:
• Define grandparent
grandparent( X , Z ) :– parent( X , Y ),parent(Y, Z ).
![Page 13: CS 403: Programming Languages Lecture 18 Fall 2003 Department of Computer Science University of Alabama Joel Jones](https://reader030.vdocuments.us/reader030/viewer/2022033106/5697c01a1a28abf838ccecf6/html5/thumbnails/13.jpg)
mother(mary, ann).mother(mary, joe).mother(sue, marY ).father(mike, ann).father(mike, joe).
parent( X , Y ) :– mother( X , Y ). parent( X , Y ) :– father( X , Y ).
?- parent( X , joe).X = mary yes
parent(X,Y) := mother(X,joe).
?- parent(X,joe). X=X,Y=joe
mother(mary,ann). /* fails */
mother(mary,joe). /* succeeds */
?- mother(X,joe).
binding
![Page 14: CS 403: Programming Languages Lecture 18 Fall 2003 Department of Computer Science University of Alabama Joel Jones](https://reader030.vdocuments.us/reader030/viewer/2022033106/5697c01a1a28abf838ccecf6/html5/thumbnails/14.jpg)
Lecture 18 14
QuickTime™ and aTIFF (Uncompressed) decompressorare needed to see this picture.
?- parent( X , ann), parent( X , joe).X = mary;X = mikeyes
?- grandparent(sue, Y ).Y = ann;Y = joeyes
![Page 15: CS 403: Programming Languages Lecture 18 Fall 2003 Department of Computer Science University of Alabama Joel Jones](https://reader030.vdocuments.us/reader030/viewer/2022033106/5697c01a1a28abf838ccecf6/html5/thumbnails/15.jpg)
Lecture 18 15
QuickTime™ and aTIFF (Uncompressed) decompressorare needed to see this picture.
Tracing exercise /* specification of factorial n! */ factorial(0,1). factorial(N, M):– N1 is N – 1, factorial (N1,
M1), M is N*M1.
Pair Up:
• Trace factorial(2,X)
![Page 16: CS 403: Programming Languages Lecture 18 Fall 2003 Department of Computer Science University of Alabama Joel Jones](https://reader030.vdocuments.us/reader030/viewer/2022033106/5697c01a1a28abf838ccecf6/html5/thumbnails/16.jpg)
Lecture 18 16
QuickTime™ and aTIFF (Uncompressed) decompressorare needed to see this picture.
Solution
![Page 17: CS 403: Programming Languages Lecture 18 Fall 2003 Department of Computer Science University of Alabama Joel Jones](https://reader030.vdocuments.us/reader030/viewer/2022033106/5697c01a1a28abf838ccecf6/html5/thumbnails/17.jpg)
Lecture 18 17
QuickTime™ and aTIFF (Uncompressed) decompressorare needed to see this picture.
Recursion in Prolog trivial, or boundary cases ‘general’ cases where the solution is
constructed from solutions of (simpler) version of the original problem itself.
What is the length of a list ? THINK:
The length of a list, [ e | Tail ], is 1 + the length of Tail
What is the boundary condition? The list [ ] is the boundary. The length of [ ] is 0.
![Page 18: CS 403: Programming Languages Lecture 18 Fall 2003 Department of Computer Science University of Alabama Joel Jones](https://reader030.vdocuments.us/reader030/viewer/2022033106/5697c01a1a28abf838ccecf6/html5/thumbnails/18.jpg)
Lecture 18 18
QuickTime™ and aTIFF (Uncompressed) decompressorare needed to see this picture.
Recursion Where do we store the value of the length?--
accumulator --
• length( [ ], 0 ).• length([H | T], N) :- length(T,Nx), N is Nx + 1
mylength( [ ], 0).mylength( [X | Y], N):–mylength(Y, Nx), N is Nx+1.
? – mylength( [1, 7, 9], X ).X = 3
![Page 19: CS 403: Programming Languages Lecture 18 Fall 2003 Department of Computer Science University of Alabama Joel Jones](https://reader030.vdocuments.us/reader030/viewer/2022033106/5697c01a1a28abf838ccecf6/html5/thumbnails/19.jpg)
Lecture 18 19
QuickTime™ and aTIFF (Uncompressed) decompressorare needed to see this picture.
Recursion? - mylength(jim, X ).
no
? - mylength(Jim, X ).
Jim = [ ]
X = 0mymember( X , [X | _ ] ).
mymember( X , [ _ | Z ] ) :– mymember( X , Z ).
![Page 20: CS 403: Programming Languages Lecture 18 Fall 2003 Department of Computer Science University of Alabama Joel Jones](https://reader030.vdocuments.us/reader030/viewer/2022033106/5697c01a1a28abf838ccecf6/html5/thumbnails/20.jpg)
Lecture 18 20
QuickTime™ and aTIFF (Uncompressed) decompressorare needed to see this picture.
Recursion % equivalently: However swipl will give a warning % Singleton variables : Y W mymember( X , [X | Y] ). mymember( X , [W | Z ] ) :– mymember( X , Z ).
1?–mymember(a, [b, c, 6] ). no 2? – mymember(a, [b, a, 6] ). yes 3? – mymember( X , [b, c, 6] ). X = b; X = c; X = 6; no
![Page 21: CS 403: Programming Languages Lecture 18 Fall 2003 Department of Computer Science University of Alabama Joel Jones](https://reader030.vdocuments.us/reader030/viewer/2022033106/5697c01a1a28abf838ccecf6/html5/thumbnails/21.jpg)
Lecture 18 21
QuickTime™ and aTIFF (Uncompressed) decompressorare needed to see this picture.
Appending Lists I
The Problem: Define a relation append(X,Y,Z) to mean that X appended to Y yields Z
The Program:
append([], Y, Y).
append([H|X], Y, [H|Z]) :- append(X,Y,Z).
![Page 22: CS 403: Programming Languages Lecture 18 Fall 2003 Department of Computer Science University of Alabama Joel Jones](https://reader030.vdocuments.us/reader030/viewer/2022033106/5697c01a1a28abf838ccecf6/html5/thumbnails/22.jpg)
Lecture 18 22
QuickTime™ and aTIFF (Uncompressed) decompressorare needed to see this picture.
Watch it work: ?- [append]. ?- append([1,2,3,4,5],[a,b,c,d],Z).Z = [1,2,3,4,5,a,b,c,d]?;no ?- append(X,Y,[1,2,3]). X = [] Y = [1,2,3]?;X = [1] Y = [2,3]?;X = [1,2] Y = [3]?;X = [1,2,3] Y = []?; no ?-
![Page 23: CS 403: Programming Languages Lecture 18 Fall 2003 Department of Computer Science University of Alabama Joel Jones](https://reader030.vdocuments.us/reader030/viewer/2022033106/5697c01a1a28abf838ccecf6/html5/thumbnails/23.jpg)
Lecture 18 23
QuickTime™ and aTIFF (Uncompressed) decompressorare needed to see this picture.
Watch it work:
?- append([1,2,3],Y,Z).
Z = [1,2,3|Y]
![Page 24: CS 403: Programming Languages Lecture 18 Fall 2003 Department of Computer Science University of Alabama Joel Jones](https://reader030.vdocuments.us/reader030/viewer/2022033106/5697c01a1a28abf838ccecf6/html5/thumbnails/24.jpg)
Lecture 18 24
QuickTime™ and aTIFF (Uncompressed) decompressorare needed to see this picture.
Length of Lists I
The Problem: Define a relation llength(L,N) to mean that the length of the list L is N.
The Program: llength([],0). llength([X|Z],N):- llength(Z,M), N is M + 1.
![Page 25: CS 403: Programming Languages Lecture 18 Fall 2003 Department of Computer Science University of Alabama Joel Jones](https://reader030.vdocuments.us/reader030/viewer/2022033106/5697c01a1a28abf838ccecf6/html5/thumbnails/25.jpg)
Lecture 18 25
QuickTime™ and aTIFF (Uncompressed) decompressorare needed to see this picture.
Watch it work:
?- [length]. ?- llength([a,b,c,d],M). M=4
![Page 26: CS 403: Programming Languages Lecture 18 Fall 2003 Department of Computer Science University of Alabama Joel Jones](https://reader030.vdocuments.us/reader030/viewer/2022033106/5697c01a1a28abf838ccecf6/html5/thumbnails/26.jpg)
Lecture 18 26
QuickTime™ and aTIFF (Uncompressed) decompressorare needed to see this picture.
Length of Lists II
The Program: llength([],0). llength([X|Z],N) :- N is M + 1, llength(Z,M).
![Page 27: CS 403: Programming Languages Lecture 18 Fall 2003 Department of Computer Science University of Alabama Joel Jones](https://reader030.vdocuments.us/reader030/viewer/2022033106/5697c01a1a28abf838ccecf6/html5/thumbnails/27.jpg)
Lecture 18 27
QuickTime™ and aTIFF (Uncompressed) decompressorare needed to see this picture.
Watch it work:
?- [length2]. ?- llength([a,b,c,d],M). uncaught exception:
error(instantiation_error,(is)/2)