Homework #10Assigned: April 15
Due: April 22, 4:30pm, in class
- (5 points) Define a PROLOG predicate
adjacent which accepts only 3 arguments
and succeeds if its first two arguments are
adjacent in its third list argument and fails
otherwise. For example,
?- adjacent(1,2,[1,2,3]).
true.
?- adjacent(2,3,[1,2,3]).
true.
?- adjacent(3,1,[1,2,3]).
fail.
- (5 points) Define a PROLOG predicate
last which accepts only 2 arguments and
succeeds if its first argument is the last element
of its second list argument and fails otherwise.
For example,
?- last(X,[1,2,3]).
X = 3
?- last(4,[1,2,3]).
fail.
- (10 points) Define a PROLOG predicate
validdate which accepts only 3 arguments,
which represent a month, day, and year, in that
order, and succeeds if these arguments represent a
valid date in Gregorian calendar, and fails
otherwise. Recall, a leap year is one which is
divisible by 400, or divisible by 4, but not also
100. Therefore, 2000, 2004, 2008 were leap years,
while 1800 and 1900 were not. Your solution may
contain helper predicates, but must not exceed 20
lines of code. The following are some examples:
?- validdate(feb,29,2000).
true.
?- validdate(feb,30,2000).
fail.
?- validdate(feb,29,2004).
true.
?- validdate(feb,29,1900).
fail.
?- validdate(may,16,2007).
true.
?- validdate(jun,31,2007).
fail.
?- validdate(apr,-10,3).
fail.
?- validdate(apr,32,3).
fail.
?- validdate(apr,30,-100).
fail.
?- validdate(apr,30,0).
true.
?- validdate(jul,0,0).
fail.
?- validdate(jul,1,0).
true.
?- validdate(fun,15,2006).
fail.
- (5 points) Consider the following Smalltalk
implementation of Euclid's gcd (greatest common
divisor) algorithm:
gcd: other
[self = other]
ifTrue: [^ self]
[self < other]
ifTrue: [^ self gcd: (other - self)]
ifFalse: [^ other gcd: (self - other)]
Trace all messages involved in evaluating
4 gcd: 6.
- (5 points) In Smalltalk, everything is an
object, even a class. What advantages does this
design provide over other object-oriented languages
such as C++ or Java where everything is not an
object? What disadvantages does this approach have?
- (5 points) Read
A Conversation with Alan Kay from ACM
Queue, 2(9), 2004-05 and write a 250
word commentary on it. In your commentary, take a
stance and defend your arguments with concepts you
have leaned in this course. Also, address the
advantages and disadvantages to dynamic binding and
its potential to have an impact on software
development. Be clear and concise in your prose.
``Alan Kay led the team that developed Smalltalk at
Xerox PARC. He is the recipient of the 2003 ACM
A.M. Turing Award for pioneering many of the ideas
at the root of contemporary object-oriented
programming languages, leading the team that
developed Smalltalk, and for fundamental
contributions to personal computing. The Turing
Award is the analog of the Nobel Prize for computer
scientists. Kay said `the best way to predict the
future is to invent it.'''
- (20 points) First complete
John Maloney's Squeak tutorial and implement
the BankAccount class. You will then
inherit from this class and add new
functionality, specifically:
- create a subclass of BankAccount
called SavingsAccount which has, in
addition to balance and
history, an allotment of
money in various categories. The allotment is
an associative array involving (category,
value) pairs. For instance, a sample allotment
is: {('education',20),('marriage',30),('parking
tickets',70),('Having Perugini for CPS343',
priceless)}. Recall from lecture how such an
associative array can be implemented. The idea
of allotment is to describe how the
balance (from BankAccount) is
distributed (note that this differs from the
tutorial). Therefore, if balance is
$1000, and allotment is:
{('education',10),('marriage',30)}, then this
means that 10/(10+30) of balance is
dedicated toward education, and the remaining
30/(10+30) of balance is reserved for
marriage costs. In other words, there is three
times more money reserved for marriage than
education.
-
SavingsAccount must support the
following messages:
- new which creates a
SavingsAccount object, initializes
balance to zero, and
history and allotment to
empty lists.
- initialize, which sets
balance to zero and initializes
history and allotment to
empty lists (this is meant for use with an
existing SavingsAccount
object).
- plansavings: factor for:
reason adds an entry in
allotment of (reason,factor).
- showdistribution which plots a
bar chart of money versus the categories in
which it is allotted. For instance, when
balance is $1000, and
allotment is:
{('education',10),('marriage',30)}, then
the bar chart will show two bars: one of
height $250 for education and the other of
height $750 for marriage.
- (15 points extra credit) Implement a
message pies in
SavingsAccount which presents the
percentage distribution of allotments in the
form of a pie chart, with each slice of a
different color and clearly labeled with the
corresponding category. It is not necessary to
build the pie chart from scratch. Use an
existing pie chart class available in Squeak or
from the web.
Your program must adhere to the tenets of
object-oriented programming (encapsulation,
information hiding) as well as our
programming style guide. There is sample
code to execute in your project workspace
available
here.
Your entire class hierarchy must be stored as
a single file. All documentation and identifying
information should be placed in comments within
your source code. Each class must begin with the
comment header given in the
style guide and each method must begin with
comments.
Save your class category HW10 from
the System Browser by ctrl-clicking on the
category name in the browser and selecting
fileOut. A file with the .st
extension will be generated in the current
directory. For more details, including how to
open such a saved file in the Squeak environment,
see
Opening and Saving files in Squeak.
Submit a printout of all of your code,
including your code for the BankAccount
class. To access all of your code for a category
of classes or a particular class, save the
category or class and then open it. When opening
the file, the bottom section of the file dialog
box will contain all of the code for the
particular category of classes or class which you
are attempting to open. HTML generation.
Squeak your way in to Smalltalk and have
fun!
|