<rss version="2.0"><channel><title>Blog for 211 S '05</title><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html</link><sy:updateperiod>hourly</sy:updateperiod><sy:updatefrequency>1</sy:updatefrequency><description>211 S '05 Blog</description><lastbuilddate>Thursday, April 21st, 2005</lastbuilddate><item><title>Thursday, April 21st, 2005 10:02:55am</title><description>&lt;div&gt;

If you didn't turn in your signed project analysis for the final
homework, do so by Friday 4/22.  I don't want to take off points for
this, but I will if it's not turned in.  If you didn't turn one in I will have sent you an email this morning.

&lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000057.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000057.html</guid><pubdate>Thursday, April 21st, 2005 10:02:55am</pubdate></item><item><title>Wednesday, April 13th, 2005 3:55:29pm</title><description>&lt;div&gt;

The final homework is due at the end of the day on 4/13, not 4:30pm.

&lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000056.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000056.html</guid><pubdate>Wednesday, April 13th, 2005 3:55:29pm</pubdate></item><item><title>Wednesday, April 13th, 2005 7:44:31am</title><description>&lt;div&gt;

I'll be around this afternoon for those who need help on your final
homework.  If you will be in the lab and need help please send me
email, I can stop by.  Also, Sarah has office hours today from
11am-1pm, so please see her with questions, too.

&lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000055.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000055.html</guid><pubdate>Wednesday, April 13th, 2005 7:44:31am</pubdate></item><item><title>Wednesday, April 13th, 2005 7:20:31am</title><description>&lt;div&gt;

Because there was some confusion about what "end of the term" meant,
revisions on the exam and the essay will not be required.  You are
encouraged to turn in a description of the problems you had on the
exam, though; you may do this anytime.  I had intended for you to turn
the revisions in by today, but since some students were confused and I
want you to focus on the project and I definitely don't want to give
you work during finals, I will make the revisions optional.

&lt;p&gt;
Good luck on the project!
&lt;/p&gt;

&lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000054.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000054.html</guid><pubdate>Wednesday, April 13th, 2005 7:20:31am</pubdate></item><item><title>Tuesday, April 12th, 2005 9:56:13am</title><description>&lt;div&gt;

A reminder that before the end of this term you must turn in the
following to receive credit for the final exam:
&lt;ol&gt;
&lt;li&gt;exam corrections for the computer problms, &lt;/li&gt;
&lt;li&gt;and a 200-word-max essay on why the test was difficult for you&lt;/li&gt;
&lt;/ol&gt;

Sarah mailed all your original exam answers back to you, if you did
not receive them mail both of us; we'll send them immediately.

In particular, you must turn in exam solutions that &lt;b&gt;run&lt;/b&gt;.  If
they do not run, you will not receive credit.

&lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000053.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000053.html</guid><pubdate>Tuesday, April 12th, 2005 9:56:13am</pubdate></item><item><title>Monday, April 11th, 2005 11:15:25pm</title><description>&lt;div&gt;

&lt;p&gt;
The final project is due this Wednesday 4/13 at 4:30.  You must email
the program as well as turning in a hard copy in a box marked outside
Jeff's office by this day.
&lt;/p&gt;

&lt;p&gt;
Jeff will hold office hours from 1-3pm on Tuesday 4/12.  Sarah will
hold office hours from 11am-1pm on Wednesday 4/13.
&lt;/p&gt;

&lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000052.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000052.html</guid><pubdate>Monday, April 11th, 2005 11:15:25pm</pubdate></item><item><title>Tuesday, April 5th, 2005 9:16:06am</title><description>&lt;div&gt;

We will do course evaluations at the end of class on Wednesday 4/6.

&lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000051.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000051.html</guid><pubdate>Tuesday, April 5th, 2005 9:16:06am</pubdate></item><item><title>Monday, April 4th, 2005 11:05:33am</title><description>&lt;div&gt;

Sarah will hold office hours this Wednesday, 4/6, from 10am-12pm.  I
will hold my office hours that day from 1:30-3:30pm.

&lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000050.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000050.html</guid><pubdate>Monday, April 4th, 2005 11:05:33am</pubdate></item><item><title>Sunday, April 3rd, 2005 10:59:13am</title><description>&lt;div&gt;

Please remember that you must turn in the initial design of your project by 4/7.  Every design must include the following:
&lt;ul&gt;

&lt;li&gt;
Data analysis:  Data definitions and interpretations.
&lt;/li&gt;

&lt;li&gt;
Functional analysis: You must decide the primary functions you'll use
and write the contracts, purposes, and headers for these.
&lt;/li&gt;

&lt;/ul&gt;

This should be not much longer than a page.  This will force you to
think hard about your design, and will help us focus designs that are
too complex.

&lt;p&gt;
If you up with your own project idea, you must also include a
description of you idea similar to those found on the web page in
addition to the above design.
&lt;/p&gt;

&lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000049.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000049.html</guid><pubdate>Sunday, April 3rd, 2005 10:59:13am</pubdate></item><item><title>Monday, March 28th, 2005 6:56:59pm</title><description>&lt;div&gt;

&lt;p&gt;
As I said in class today, I was not pleased with the class's
performance on the computerized portion of the midterm.  Hence,
everyone &lt;b&gt;must&lt;/b&gt; turn in completed questions that run before the
end of the year; email them to me.
&lt;/p&gt;



&lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000048.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000048.html</guid><pubdate>Monday, March 28th, 2005 6:56:59pm</pubdate></item><item><title>Monday, March 28th, 2005 3:06:56pm</title><description>&lt;div&gt;

The exam has been graded and will be given back in class.  Results are
&lt;i&gt;interesting&lt;/i&gt;.  Also &lt;a href="Assignments/13.html"&gt;assignment
13&lt;/a&gt; has been posted.  This is very similar to last semester's final
assignment and will be worth more points than a regular assignment.
I'll talk about it briefly in class today.

&lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000047.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000047.html</guid><pubdate>Monday, March 28th, 2005 3:06:56pm</pubdate></item><item><title>Thursday, March 24th, 2005 3:32:55pm</title><description>&lt;div&gt; 

I will out of town on April 7&lt;sup&gt;th&lt;/sup&gt;, so we will not have class
that day.


&lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000046.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000046.html</guid><pubdate>Thursday, March 24th, 2005 3:32:55pm</pubdate></item><item><title>Wednesday, March 23rd, 2005 6:14:32pm</title><description>&lt;div&gt;
A student asked:
&lt;blockquote&gt;
&lt;code&gt;
I was wondering if it was ok to have a printed out version of the Blog
and examples that were put on the website. Thanks for your help.
&lt;/code&gt;
&lt;/blockquote&gt;

I responded:
&lt;blockquote&gt;
&lt;code&gt;
yep, that's fine.  And I'll put that on the blog.

Jeff
&lt;/code&gt;
&lt;/blockquote&gt;

&lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000045.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000045.html</guid><pubdate>Wednesday, March 23rd, 2005 6:14:32pm</pubdate></item><item><title>Wednesday, March 23rd, 2005 3:01:20pm</title><description>&lt;div&gt; 

&lt;p&gt;
The exam will be tomorrow (3/24) in WVH 212, the computer lab.  It
will start promptly at 6:30pm, and you will have 3 hours.  Those who
require extra time will start at 5:00pm.  The computers will not be
plugged into the interne.  You may bring your blue book and notes from
this class.  Either or both may be digital.  If you wish to have your
digital notes with you for the exam, you must email them to me before
3:00pm on 3/24.  You &lt;u&gt;may not&lt;/u&gt; bring notes from previous
semesters or any other aids.  If you have any questions about what you
can bring into the exam, ask.  If you are found to have notes from
previous semesters or any material other than the blue book or notes
and materials from &lt;u&gt;this&lt;/u&gt; year during the exam you will receive a
zero on the exam and be charged with academic dishonesty.  You will
also have to sign a sheet acknowledging this policy and show your ID
to hand in your exam.
&lt;/p&gt;

&lt;p&gt;
There will be a written part of the exam and a part of the exam to be
completed on the computer.  We will give precise instructions of how
to hand in these parts at the exam.  But, basically you will complete
the written part, then complete the computer part.  When you are
finished you we will plug your computer back into the internet and
submit the computer part.  You will hand in your signed exam, showing
your ID to the proctor, and be on your way.
&lt;/p&gt;

&lt;p&gt;
There will be no lab the Friday after.
&lt;/p&gt;

&lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000044.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000044.html</guid><pubdate>Wednesday, March 23rd, 2005 3:01:20pm</pubdate></item><item><title>Tuesday, March 22nd, 2005 9:19:23am</title><description>&lt;div&gt;
Here is the derivative
&lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000043.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000043.html</guid><pubdate>Tuesday, March 22nd, 2005 9:19:23am</pubdate></item><item><title>Tuesday, March 22nd, 2005 9:17:59am</title><description>&lt;div&gt;
Here is the derivative example from class today.
&lt;blockquote&gt;
&lt;a href="03-21/der.ss"&gt;der.ss&lt;/a&gt;
&lt;/blockquote&gt;

Note that I used structural recursion with an accumulator.  Plus there
is a special case in here.  If you consider some examples:
&lt;table&gt;

&lt;tr&gt;
&lt;th&gt;polynomial&lt;/th&gt;&lt;th&gt;derivative&lt;/th&gt;&lt;th&gt;scheme polynomial&lt;/th&gt;&lt;th&gt;scheme derivative&lt;/th&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;&lt;code&gt;(list 4)&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;(list 0)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;x + 3&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;code&gt;(list 1 3)&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;(list 1)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;x&lt;sup&gt;3&lt;/sup&gt; + 2x&lt;sup&gt;2&lt;/sup&gt; + 3x + 4&lt;/td&gt;
&lt;td&gt;3x&lt;sup&gt;2&lt;/sup&gt; + 4x + 3&lt;/td&gt;
&lt;td&gt;&lt;code&gt;(list 1 2 3 4)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;(list 3 4 3)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;

So we use one function called &lt;code&gt;der&lt;/code&gt; for handling the case
were we can have just a constant and one function called
&lt;code&gt;der2&lt;/code&gt; for handling the case that we have a term wih an
exponent of at least 1.

&lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000042.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000042.html</guid><pubdate>Tuesday, March 22nd, 2005 9:17:59am</pubdate></item><item><title>Wednesday, March 16th, 2005 6:56:45pm</title><description>&lt;div&gt;
Here are the various versions of random number lists we talked about today:
&lt;blockquote&gt;
&lt;a href="03-16/randoms.ss"&gt;randoms.ss&lt;/a&gt;
&lt;/blockquote&gt;
A couple things to note:
&lt;ol&gt;
&lt;li&gt;
I used a helper function to test two of these functions.  This is a
simple use of functional abstraction.  One can note that in order to
test a function that is produce a list of &lt;i&gt;n&lt;/i&gt; distinct numbers,
there are two things to test: (1) that there are &lt;i&gt;n&lt;/i&gt; numbers, (2)
they are all distinct.  So, we want to test this every time, but have
one function to do it.
&lt;/li&gt;
&lt;li&gt;
Secondly, I used &lt;code&gt;local&lt;/code&gt; to define the accumulator function
in the last example.  This is an idiom.  Essentially, the idiom is as
follows:  If you ever write an accumulator-style function &lt;code&gt;do-something&lt;/code&gt; as:
&lt;blockquote&gt;
&lt;pre&gt;
(define (do-something a1 a2 ... an)
  (do-something-acc a1 a2 ... an base-case))

(define (do-something-acc a1 a2 ... an base-case) ... )
&lt;/pre&gt;
&lt;/blockquote&gt;
you can usually write is as:
&lt;blockquote&gt;
&lt;pre&gt;
(define (do-something a1 a2 ... an)
  (local ((define  (do-something-loop base-case)) ... )
    (do-something-loop base-case)))
&lt;/pre&gt;
&lt;/blockquote&gt;
Because, if you see, the only change is that instead of passing
&lt;code&gt;a1&lt;/code&gt;, &lt;code&gt;a2&lt;/code&gt;, ..., &lt;code&gt;an&lt;/code&gt; as arguments to
&lt;code&gt;do-something-cc&lt;/code&gt;, you can make it a local, because
&lt;code&gt;do-something-loop&lt;/code&gt; already &lt;i&gt;sees&lt;/i&gt; &lt;code&gt;a1&lt;/code&gt;,
&lt;code&gt;a2&lt;/code&gt;, ..., &lt;code&gt;an&lt;/code&gt;.
&lt;/li&gt;

&lt;/ol&gt;

 &lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000041.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000041.html</guid><pubdate>Wednesday, March 16th, 2005 6:56:45pm</pubdate></item><item><title>Wednesday, March 16th, 2005 6:30:15pm</title><description>&lt;div&gt;
Here is the code from today that we didn't get to:

&lt;blockquote&gt;
&lt;table border="0"&gt;
&lt;tr&gt;&lt;td&gt;Graph paths:&lt;/td&gt;&lt;td&gt;&lt;a href="03-16/graph.ss"&gt;graph.ss&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Graph paths with an accumulator:&lt;/td&gt;&lt;td&gt;&lt;a href="03-16/graph-acc.ss"&gt;graph-acc.ss&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Guessing:&lt;/td&gt;&lt;td&gt;&lt;a href="03-16/guess.ss"&gt;guess.ss&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;


The first just finds path from two nodes in a graph; we discussed this
in class previously.  But this one has the small change that we
determined &lt;b&gt;if&lt;/b&gt; there is a path, but we're not concerned
&lt;b&gt;what&lt;/b&gt; it actually is.  This raises a problem, as we'll see
tomorrow, when there are loops in the graph; and this is solved in the
second program.

The last one simulates a guessing game.  The idea is that
&lt;code&gt;guess&lt;/code&gt; takes an oracle who tells whether the answer is
&lt;code&gt;correct&lt;/code&gt;, &lt;code&gt;higher&lt;/code&gt;, or &lt;code&gt;lower&lt;/code&gt; than
the current guess, &lt;code&gt;n&lt;/code&gt;.  The method for guessing is that,
at every step, we choose the next guess based on the previous guess
and what the oracle tells us.  If we guess a number that is higher
than the correct answer and our last guess was higher, we'll choose a
number right in the middle of the guessed number and lowest.  If the
last guess was lower, we'll choose a number right in the middle of the
last number and the new guess.  Therefor, we &lt;i&gt;accumulate&lt;/i&gt; the
last guess in &lt;code&gt;last&lt;/code&gt;.  Using the method one can guess a
&lt;i&gt;secret&lt;/i&gt; number in a finite number of tries, depending on the
range.  Here, the range is 0 to 100.  So, the number of guesses is
&lt;i&gt;O(f(r))&lt;/i&gt; for a range &lt;i&gt;r&lt;/i&gt;.  One way of guess the function
&lt;i&gt;f&lt;/i&gt;, is to run this program many times on many ranges.  But in
order to do this you need to determine how many guesses were made.  So
one task (exercise) is to right a new function based on &lt;code&gt;guess&lt;/code&gt;

&lt;blockquote&gt;
&lt;pre&gt;
;; guess-tally: (Number - Answer) Number - Number
;; returns the number of guesses used is guessing p's number starting
;; with n
(define (guess-tally p n) ... )
&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000040.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000040.html</guid><pubdate>Wednesday, March 16th, 2005 6:30:15pm</pubdate></item><item><title>Tuesday, March 15th, 2005 7:02:37am</title><description>&lt;div&gt;

Here's the start of our &lt;code&gt;randoms&lt;/code&gt; program... try to finish
it.

&lt;blockquote&gt;
&lt;pre&gt;
;; randoms: Number - (listof Number)
;; returns a list of n random unique numbers
(define (randoms n)
  (randoms-acc n ...))

;; randoms-acc: Number (listof Number) - (listof Number)
;; produces a list of n random numbers, and accumulates
;; the result in acc
(define (randoms-acc n acc)
  (cond
    [(= n (length acc)) ...]
    [else (cons (random n) (randoms-acc (- n 1) ...))]))
&lt;/pre&gt;
&lt;/blockquote&gt;

And here is the code for the graph traversal we did in class:

&lt;blockquote&gt;
&lt;a href="03-14/find-route.scm"&gt;find-route.scm&lt;/a&gt;
&lt;/blockquote&gt;

&lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000039.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000039.html</guid><pubdate>Tuesday, March 15th, 2005 7:02:37am</pubdate></item><item><title>Monday, March 14th, 2005 11:25:17am</title><description>&lt;div&gt;

Here (&lt;a href="world-example.ss"&gt;world-example.ss&lt;/a&gt;) is an example
of using the &lt;code&gt;world.ss&lt;/code&gt; teachpack.  You should first read the help documentation, then look at this example.

We want to define a world that contains a rocket.  World-passing style
is a way of programming where that we use to represent the world.  In
particular we need a definition of the world. So we define the world
as a union.

&lt;blockquote&gt;&lt;pre&gt;
;; Data Def:
;; World is one of
;; -- false
;; -- positive number
;; Interpretation:
;; -- false means the rocket hasn't been launched
;; -- number n means the rocket has been 
;;    launched and has reached height n
&lt;/pre&gt;&lt;/blockquote&gt;

The way this teachpack works is as follows: We will call
&lt;code&gt;big-bang&lt;/code&gt; and tell it how big the world should be and how
often to update it.  In our example we have decided to update the
world every &lt;code&gt;0.1&lt;/code&gt; seconds.  So, every 0.1 seconds this
teachpack will look for a function that we have passed to
&lt;code&gt;on-tick-event&lt;/code&gt;, and this function should consume a World
and produce an updated World.  So, we need to define a function, we'll
call it &lt;tock&gt;tock&lt;/tock&gt; that consumes a World and returns a new
world.  For our world our new world will be a new world that contains
a rocket that moved a little.

We will use the special form:

&lt;blockquote&gt;
&lt;pre&gt;
(update (world-draw w) produce (world-move w)))
&lt;/pre&gt;
&lt;/blockquote&gt;

to define a function &lt;code&gt;tock&lt;/code&gt;.  This function will update the
world on every tick.

&lt;blockquote&gt;
&lt;pre&gt;
;; tock : World - World
;; update the canvas and produce next world
(define (tock w)
  (update (world-draw w) produce (world-move w)))
&lt;/pre&gt;
&lt;/blockquote&gt;

Think of &lt;code&gt;update&lt;/code&gt; as &lt;i&gt;magic&lt;/i&gt;.  The expression passed
to updated will be evaluated on every tick to update our
&lt;i&gt;perception&lt;/i&gt; of the world; the expression to produce will be
evaluated on every tick to produce a new world.  One way to think of
it isthat these &lt;code&gt;(update ... produce ...)&lt;/code&gt; are linked.
Supposed we start by passing a world called &lt;code&gt;w0&lt;/code&gt; to
&lt;code&gt;big-bang&lt;/code&gt;, then the calls to &lt;code&gt;tock&lt;/code&gt; are linked
in the following way:

&lt;blockquote&gt;
&lt;pre&gt;
The world we see:

           (update w0 produce w0)
                   |          |
     output  -----*          |----------*
                              |          |
                              V          V
                      (update w1 produce w1)
                              |          |
                output  -----*          |----------*
                                         |          |
                                         V          V
                                 (update w2 produce w2)
                                         |          |
                           output  -----*          |----------*
                                                    |          |              
                                                    V          V
                                                    w3         w3
                                            ....
                                         wn         wn
                                         |          |
                           output  -----*          |----------*
                                                    |          |
                                                    V          V
                                            (update wn produce wn)
&lt;/pre&gt;
&lt;/blockquote&gt;

This keeps going until we call &lt;code&gt;end-of-time&lt;/code&gt;.

&lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000038.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000038.html</guid><pubdate>Monday, March 14th, 2005 11:25:17am</pubdate></item><item><title>Friday, March 11th, 2005 7:07:22am</title><description>&lt;div&gt;
Here are the two examples from class yesterday:

&lt;blockquote&gt;
&lt;table border="0"&gt;
&lt;tr&gt;&lt;td align="right"&gt;Merge sort:&lt;/td&gt;&lt;td&gt;&lt;a href="03-09/mergesort.scm"&gt;mergesort.scm&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td align="right"&gt;Fractal:&lt;/td&gt;&lt;td&gt;&lt;a href="03-09/fractal.scm"&gt;fractal.scm&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;
&lt;p&gt;
Remeber, in &lt;em&gt;structual recursion&lt;/em&gt; we recur over the shape of
the input data.  An example is the template for simple lists.  In
&lt;em&gt;generative recursion&lt;/em&gt; we actually create new data on which to
recur.  Our examples yesterday were fractals and mergesort.
&lt;/p&gt;

&lt;p&gt;
To explain this in another way, let's look at the English statements
for the two.

&lt;blockquote&gt;
&lt;b&gt;Structual:&lt;/b&gt; For example, consider a function to add 1 to every
item in a list of numbers.
&lt;blockquote&gt;
&lt;code&gt;;; add1*: (listof Number) - (listof Number)&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;;; adds 1 to all in l&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;(define (add1* l)&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;(cond&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;&lt;font color="red"&gt;[(empty? l) empty]&lt;/font&gt;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;&lt;font color="blue"&gt;[else (cons (add1 (first l)) (add1* (rest l)))]))&lt;/font&gt;&lt;/code&gt;&lt;br /&gt;
&lt;/blockquote&gt;
In English this says "&lt;font color="red"&gt;if the input list is empty, return empty&lt;/font&gt;; &lt;font color="blue"&gt;otherwise add 1 to the first item and recursively process the rest of the list.&lt;/font&gt;"
&lt;/blockquote&gt;

&lt;blockquote&gt;
&lt;b&gt;Generative:&lt;/b&gt; Take our merge sort example from class:

&lt;blockquote&gt;
&lt;code&gt;;; mergesort: (listof Number) - (listof Number)&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;;; returns a sorted version of the input list&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;(define (mergesort lon)&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;(cond&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;&lt;font color="red"&gt;[(= (length lon) 1) lon]&lt;/font&gt;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;&lt;font color="blue"&gt;[else (merge (mergesort (firsthalf lon))&lt;/font&gt;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;&lt;font color="blue"&gt;(mergesort (secondhalf lon)))]))&lt;/font&gt;&lt;/code&gt;&lt;br /&gt;
&lt;/blockquote&gt;
In English this says "&lt;font color="red"&gt;if the length of the input list if 1 or 0 return the list -- it's sorted&lt;/font&gt;; &lt;font color="blue"&gt;otherwise break the list in two and recur on those.&lt;/font&gt;"
&lt;/blockquote&gt;

Note that I've colored coded the English statements and the
code. &lt;font color="red"&gt;Red&lt;/font&gt; corresponds to the termination
case, and &lt;font color="blue"&gt;blue&lt;/font&gt; corresponds to the recursive
case.  In every recursive function you write your must note and state
the termination condition.  Repeating &lt;b&gt;every recursive function you
write your must note and state the termination condition!!!!&lt;/b&gt; As a
style note, this termination case will usually show up as the first
line of your cond statement, too.

&lt;/p&gt;

&lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000037.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000037.html</guid><pubdate>Friday, March 11th, 2005 7:07:22am</pubdate></item><item><title>Thursday, March 10th, 2005 10:42:23am</title><description>&lt;div&gt;
The examples from class today are here:
&lt;blockquote&gt;
&lt;a href="list-functions-examples.scm"&gt;list-functions-examples.scm&lt;/a&gt;
&lt;/blockquote&gt;
In particular we looked at three loops: &lt;code&gt;map&lt;/code&gt;,
&lt;code&gt;filter&lt;/code&gt;, and &lt;code&gt;foldr&lt;/code&gt;.  What's important to take
from each of these is an understanding of what they do, and an
understanding of when to use them.  The following table shows what they actually do ... not the code.
&lt;table border="1"&gt;
&lt;tr&gt;&lt;th&gt;Loop&lt;/th&gt;&lt;th&gt;Contract&lt;/th&gt;&lt;th&gt;Meaning&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;map&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;(&lt;b&gt;X&lt;/b&gt; - &lt;b&gt;Y&lt;/b&gt;) (listof &lt;b&gt;X&lt;/b&gt;) - (listof &lt;b&gt;Y&lt;/b&gt;)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;(map &lt;em&gt;f&lt;/em&gt; (list &lt;i&gt;x&lt;sub&gt;0&lt;/sub&gt;&lt;/i&gt; &lt;i&gt;x&lt;sub&gt;1&lt;/sub&gt;&lt;/i&gt; ... &lt;i&gt;x&lt;sub&gt;n-1&lt;/sub&gt;&lt;/i&gt;))&lt;/code&gt;=&lt;br /&gt;
&lt;code&gt;(list (&lt;i&gt;f x&lt;sub&gt;0&lt;/sub&gt;&lt;/i&gt;) (&lt;i&gt;f x&lt;sub&gt;1&lt;/sub&gt;&lt;/i&gt;) ... (&lt;i&gt;f x&lt;sub&gt;n-1&lt;/sub&gt;&lt;/i&gt;) )&lt;/code&gt;

&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;filter&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;(&lt;b&gt;X&lt;/b&gt; - Boolean) (listof &lt;b&gt;X&lt;/b&gt;) - Boolean&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;(filter &lt;em&gt;f&lt;/em&gt; (list &lt;i&gt;x&lt;sub&gt;0&lt;/sub&gt;&lt;/i&gt; &lt;i&gt;x&lt;sub&gt;1&lt;/sub&gt;&lt;/i&gt; ... &lt;i&gt;x&lt;sub&gt;n-1&lt;/sub&gt;&lt;/i&gt;))&lt;/code&gt;=&lt;br /&gt;
&lt;code&gt;(list (&lt;i&gt;f x&lt;sub&gt;0&lt;/sub&gt;&lt;/i&gt;) (&lt;i&gt;f x&lt;sub&gt;1&lt;/sub&gt;&lt;/i&gt;) ... (&lt;i&gt;f x&lt;sub&gt;m&lt;/sub&gt;&lt;/i&gt;) )&lt;/code&gt;&lt;br /&gt;
where all &lt;code&gt;(&lt;i&gt;f x&lt;sub&gt;0&lt;/sub&gt;&lt;/i&gt;)&lt;/code&gt; are &lt;code&gt;true&lt;/code&gt;.

&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;foldr&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;(&lt;b&gt;X&lt;/b&gt; &lt;b&gt;Y&lt;/b&gt; - &lt;b&gt;Y&lt;/b&gt;) &lt;b&gt;Y&lt;/b&gt; (listof &lt;b&gt;X&lt;/b&gt;) - &lt;b&gt;Y&lt;/b&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;(foldr &lt;em&gt;f&lt;/em&gt; &lt;em&gt;b&lt;/em&gt; (list &lt;i&gt;x&lt;sub&gt;0&lt;/sub&gt;&lt;/i&gt; &lt;i&gt;x&lt;sub&gt;1&lt;/sub&gt;&lt;/i&gt; ... &lt;i&gt;x&lt;sub&gt;n-1&lt;/sub&gt;&lt;/i&gt;))&lt;/code&gt;=&lt;br /&gt;
&lt;code&gt;(f &lt;i&gt;x&lt;sub&gt;0&lt;/sub&gt;&lt;/i&gt; ... (f &lt;i&gt;x&lt;sub&gt;1&lt;/sub&gt;&lt;/i&gt; (f &lt;i&gt;x&lt;sub&gt;n-1&lt;/sub&gt;&lt;/i&gt; &lt;i&gt;b&lt;/i&gt;)))&lt;/code&gt;

&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;

Here are some English meanings:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;(map &lt;i&gt;f&lt;/i&gt; &lt;i&gt;l&lt;/i&gt;)&lt;/code&gt;: Apply &lt;i&gt;f&lt;/i&gt; to all items in &lt;i&gt;l&lt;/i&gt;.
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;(filter &lt;i&gt;p&lt;/i&gt; &lt;i&gt;l&lt;/i&gt;)&lt;/code&gt;: Keeps those items in &lt;i&gt;l&lt;/i&gt; for which &lt;i&gt;p&lt;/i&gt; is &lt;code&gt;
true&lt;/code&gt;.
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;(foldr &lt;i&gt;f&lt;/i&gt; &lt;i&gt;b&lt;/i&gt; &lt;i&gt;l&lt;/i&gt;)&lt;/code&gt;: Cascade &lt;i&gt;f&lt;/i&gt; along the items in &lt;i&gt;l&lt;/i&gt;.
&lt;/li&gt;
&lt;/ul&gt;

Here are some concrete examples of using these functions to improve
your programs.  Note, I've omitted the examples and tests on this page
for space reasons, but they are included in &lt;a href="list-functions-examples.scm"&gt;list-functions-examples.scm&lt;/a&gt;.

&lt;p&gt;
&lt;b&gt;Example 1: &lt;code&gt;add1*: (listof Number) - (listof Number)&lt;/code&gt;
&lt;/b&gt;
We want to add 1 to all the items in a list of numbers.  The naive implementation is:
&lt;blockquote&gt;
&lt;code&gt;;;add1*: (listof Number) - (listof Number)&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;;; adds 1 to all numbers in l&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;(define (add1* l)&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;(cond&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;[(empty? l) empty]&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;[else (cons (&lt;font color="red"&gt;add1&lt;/font&gt; (first l)) (add1* (rest l)))]))&lt;/code&gt;&lt;br /&gt;
&lt;/blockquote&gt;

We can identify &lt;code&gt;&lt;font color="red"&gt;add1&lt;/font&gt;&lt;/code&gt; as the function that we're applying to every item in the list, so we can use &lt;code&gt;map&lt;/code&gt;.

&lt;blockquote&gt;
&lt;code&gt;;; add1/map*: (listof Number) - (listof Number)&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;;; adds 1 to all numbers in l&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;(define (add1*/map l)&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;(map &lt;font color="red"&gt;add1&lt;/font&gt; l))&lt;/code&gt;&lt;br /&gt;
&lt;/blockquote&gt;
&lt;/p&gt;



&lt;p&gt;
&lt;b&gt;Examples 2: &lt;code&gt;negs: (listof Number) - (listof Number)
&lt;/code&gt;
&lt;/b&gt;
We want to keep all the negative numbers in a list.  The naive implementation is:
&lt;blockquote&gt;
&lt;code&gt;;; negs: (listof Number) - (listof Number)&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;;; produces a list of on only the negative numbers in l&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;(define (negs l)&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;(cond&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;[(empty? l) empty]&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;[else (cond&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;[(&lt;font color="red"&gt;negative?&lt;/font&gt; (first l)) (cons (first l) (negs (rest l)))]&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;[else (negs (rest l))])]))&lt;/code&gt;&lt;br /&gt;
&lt;/blockquote&gt;

We can see we are using a  predicate -- &lt;code&gt;&lt;font color="red"&gt;negative?&lt;/font&gt;&lt;/code&gt; to decide whether to keep items -- and this sounds like we can use &lt;code&gt;filter&lt;/code&gt;.

&lt;blockquote&gt;
&lt;code&gt;;; negs/filter: (listof Number) - (listof Number)&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;;; produces a list of on only the negative numbers in l&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;(define (negs/filter l)&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;(filter &lt;font color="red"&gt;negative?&lt;/font&gt; l))&lt;/code&gt;&lt;br /&gt;
&lt;/blockquote&gt;

&lt;/p&gt;


&lt;b&gt;Example 3: &lt;code&gt;sum: (listof Number) - Number

&lt;/code&gt;
&lt;/b&gt;

We want to sum all the items in a list of numbers.  The naive implementation is:

&lt;blockquote&gt;
&lt;code&gt;;; sum: (listof Number) - Number&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;;; sums the numbers is l&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;(define (sum l)&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;(cond&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;[(empty? l) &lt;font color="green"&gt;0&lt;/font&gt;]&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;[else (&lt;font color="red"&gt;+&lt;/font&gt; (first l) (sum (rest l)))]))&lt;/code&gt;&lt;br /&gt;
&lt;/blockquote&gt;

We notice, then, that we're cascading &lt;code&gt;&lt;font color="red"&gt;+&lt;/font&gt;&lt;/code&gt; along the items of the list and using &lt;code&gt;
&lt;font color="green"&gt;0&lt;/font&gt;&lt;/code&gt; as the base case.  So, we realize this sounds like &lt;code&gt;
foldr&lt;/code&gt;.

&lt;blockquote&gt;
&lt;code&gt;;; sum/foldr: (listof Number) - Number&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;;; sums the numbers is l&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;(define (sum/foldr l)&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;(foldr &lt;font color="red"&gt;+&lt;/font&gt; &lt;font color="green"&gt;0&lt;/font&gt; l))&lt;/code&gt;&lt;br /&gt;
&lt;/blockquote&gt;


Finally, we need to know when to use these loops.  First, if you ever
write the &lt;em&gt;naive&lt;/em&gt; implementations above, you should use loops
instead.  Secondly, you need to identify when to use loops by purpose
statements.  These are some &lt;i&gt;trigger statements&lt;/i&gt; in purpose statements that should lead you to the proper loop.
&lt;blockquote&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;Loop&lt;/th&gt;&lt;th&gt;Trigger purposes&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;map&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;ul&gt;
&lt;li&gt;Do something to all items in a list...&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;filter&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;ul&gt;
&lt;li&gt;Remove all items such that...&lt;/li&gt;
&lt;li&gt;Keep all items such that...&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;foldr&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;ul&gt;
&lt;li&gt;Combine the items of a list...&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;

&lt;table border="3"&gt;
&lt;tr&gt;&lt;td&gt; 
&lt;b&gt;Notice&lt;/b&gt;&lt;br /&gt;
I have showed you the contracts, meaning, examples, and
trigger statements for &lt;code&gt;map&lt;/code&gt;, &lt;code&gt;filter&lt;/code&gt;, and
&lt;code&gt;foldr&lt;/code&gt;.  You should go ahead and do the same for the rest of the loops.  Only after using them can you really understand them!!!
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;


&lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000036.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000036.html</guid><pubdate>Thursday, March 10th, 2005 10:42:23am</pubdate></item><item><title>Thursday, March 10th, 2005 9:37:58am</title><description>&lt;div&gt;

&lt;p&gt;
All the examples used in class yesterday are &lt;a href="03-08.tar.gz"&gt;here&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
The important topic that we have started talking about is
&lt;em&gt;abstraction&lt;/em&gt;; in particular we got into loops on Monday.  A
reason we use abstraction is to have a single point of control for
every idea.  For example in our example in class we wrote one function
that added 1 to every item in a list of numbers and one that
subtracted one from every item in a list of numbers.
These are the functions:
&lt;blockquote&gt;
&lt;pre&gt;
;; add1-all: (listof Number) - (listof Number)
;; adds 1 to all in l
(define (add1-all l)
  (cond
    [(empty? l) empty]
    [else (cons (add1 (first l)) (add1-all (rest l)))]))

;; sub1-all: (listof Number) - (listof Number)
;; subtracts 1 to all in l
(define (sub1-all l)
  (cond
    [(empty? l) empty]
    [else (cons (sub1 (first l)) (sub1-all (rest l)))]))
&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;/p&gt;
First, let's abstract over the English version of these functions:
&lt;blockquote&gt;
&lt;table border="0"&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;add1-all&lt;/code&gt;&lt;/td&gt;
    &lt;td&gt;: add 1 to all items in the list&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;sub1-all&lt;/code&gt;&lt;/td&gt;
    &lt;td&gt;: subtract 1 to all items in the list&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;
To do so we first identify the difference in the two: I have shown
these differences in color.
&lt;blockquote&gt;
&lt;table border="0"&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;add1-all&lt;/code&gt;&lt;/td&gt;
    &lt;td&gt;: &lt;font color="red"&gt;add 1&lt;/font&gt; to all items in the list&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;sub1-all&lt;/code&gt;&lt;/td&gt;
    &lt;td&gt;: &lt;font color="green"&gt;subtract 1&lt;/font&gt; to all items in the list&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;
Now we make a more general (or abstract) version of these two
functions.  It's &lt;i&gt;abstract&lt;/i&gt; because there's something missing --
i.e. what to do to every item in the list.  We'll call this
&lt;i&gt;do-something&lt;/i&gt;.
&lt;blockquote&gt;
&lt;table border="0"&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;f1-all&lt;/code&gt;&lt;/td&gt;
    &lt;td&gt;: &lt;i&gt;do-something&lt;/i&gt; to all items in the list&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;

So, what we've done is get rid of everything that is the same in
&lt;code&gt;add1-all&lt;/code&gt; and &lt;code&gt;sub1-all&lt;/code&gt;, and moved it to
&lt;code&gt;f1-all&lt;/code&gt;.  The parts that were same -- &lt;font color="red"&gt;add 1&lt;/font&gt; and &lt;font color="green"&gt;subtract 1&lt;/font&gt; --
are turned into a parameter -- &lt;i&gt;do-something&lt;/i&gt;.  In order to
define a function in terms of &lt;code&gt;f1-all&lt;/code&gt; we simply decide
what to use for &lt;i&gt;do-something&lt;/i&gt; for &lt;code&gt;add1-all&lt;/code&gt; we can
use &lt;font color="red"&gt;add 1&lt;/font&gt; for &lt;i&gt;do-something&lt;/i&gt; for
&lt;code&gt;sub1-all&lt;/code&gt; we can use &lt;font color="green"&gt;subtract 1&lt;/font&gt;
for &lt;i&gt;do-something&lt;/i&gt;.  Consider
&lt;blockquote&gt;
&lt;table border="0"&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;add1-all&lt;/code&gt;&lt;/td&gt;
    &lt;td&gt;: &lt;code&gt;f1-all&lt;/code&gt; where &lt;i&gt;do-something&lt;/i&gt; is &lt;font color="red"&gt;add 1&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;code&gt;sub1-all&lt;/code&gt;&lt;/td&gt;
    &lt;td&gt;: &lt;code&gt;f1-all&lt;/code&gt; where &lt;i&gt;do-something&lt;/i&gt; is &lt;font color="green"&gt;subtract 1&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;
So, if we replace terms in &lt;code&gt;add1-all&lt;/code&gt; we have:
&lt;blockquote&gt;
&lt;table border="0"&gt;
&lt;tr&gt;
    &lt;td&gt;&lt;code&gt;f1-all&lt;/code&gt; where &lt;i&gt;do-something&lt;/i&gt; is &lt;font color="red"&gt;add 1&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt; 
&lt;tr&gt;
    &lt;td&gt;'&lt;i&gt;do-something&lt;/i&gt; to all items in the list' where &lt;i&gt;do-something&lt;/i&gt; is &lt;font color="red"&gt;add 1&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt; 
&lt;tr&gt;
    &lt;td&gt;&lt;font color="red"&gt;add 1&lt;/font&gt; to all items in the list&lt;/td&gt;&lt;/tr&gt; 
&lt;/table&gt;
&lt;/blockquote&gt;

This was in English.  The correlation to Scheme is as follows: instead
of English statements, we write functions instead of defining
one sentence in terms of another, we define a function by calling
another function.  So, instead of creating a new description for &lt;code&gt;f1-al&lt;/code&gt;, we write a function:
&lt;blockquote&gt;
&lt;pre&gt;
;; f1-all: (Number - Number) (listof Number) - (listof Number)
(define (f1-all do-something l)
  (cond
    [(empty? l) empty]
    [else (cons (do-something (first l)) (f1-all do-something (rest l)))]))
&lt;/pre&gt;
&lt;/blockquote&gt;
and pulled out the corresponding difference in &lt;code&gt;add1-all&lt;/code&gt;
and &lt;code&gt;sub1-all&lt;/code&gt; as &lt;code&gt;do-something&lt;/code&gt;.  Then, to
define &lt;code&gt;add1-all&lt;/code&gt; in terms of &lt;code&gt;f1-all&lt;/code&gt; we decide
to use that difference -- &lt;code&gt;add1&lt;/code&gt; -- in place of
&lt;code&gt;do-something&lt;/code&gt;, and this means we call &lt;code&gt;f1-all&lt;/code&gt;
passing in &lt;code&gt;add1&lt;/code&gt; for &lt;code&gt;do-something&lt;/code&gt;.  We do similarly for &lt;code&gt;sub1-all&lt;/code&gt;:
&lt;blockquote&gt;
&lt;pre&gt;
(define (add1-all l) (f1-all add1 l))
(define (sub1-all l) (f1-all sub1 l))
&lt;/pre&gt;
&lt;/blockquote&gt;
But, we can use a &lt;em&gt;loop&lt;/em&gt; called &lt;code&gt;map&lt;/code&gt; that is even more abstract than &lt;code&gt;f1-all&lt;/code&gt;.  This loop has the following contract:
&lt;blockquote&gt;
&lt;pre&gt;
;; map: (X - Y) (listof X) - (listof Y)
&lt;/pre&gt;
&lt;/blockquote&gt;

That is, &lt;code&gt;map&lt;/code&gt; takes a function that consumes data of some
type &lt;i&gt;X&lt;/i&gt; and produces data of some type &lt;i&gt;Y&lt;/i&gt; (note &lt;i&gt;X&lt;/i&gt;
could be the same as &lt;i&gt;Y&lt;/i&gt;, but need not), a list of &lt;i&gt;X&lt;/i&gt;, and
produces a list of &lt;i&gt;Y&lt;/i&gt;.  It calls this function on every item in
the input list and the outcome of that call becomes an item in the
output list.  So, we can have &lt;i&gt;X&lt;/i&gt; and &lt;i&gt;Y&lt;/i&gt;be
&lt;code&gt;Number&lt;/code&gt;, and define &lt;code&gt;add1-all&lt;/code&gt; and
&lt;code&gt;sub1-all&lt;/code&gt; as:
&lt;blockquote&gt;
&lt;pre&gt;
(define (add1-all l) (map add1 l))
(define (sub1-all l) (map sub1 l))
&lt;/pre&gt;
&lt;/blockquote&gt;
Consider a call of &lt;code&gt;add1-all&lt;/code&gt; on the list &lt;code&gt;(list 1 2 3)&lt;/code&gt; that produces the list &lt;code&gt;(list 2 3 4)&lt;/code&gt;.  Visually this looks like this:
&lt;blockquote&gt;
&lt;table border="0"&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;(add1-all &lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;(list &lt;/code&gt;&lt;/td&gt;
&lt;td&gt;1 &lt;/td&gt;
&lt;td&gt;2 &lt;/td&gt;
&lt;td&gt;3 &lt;/td&gt;
&lt;td&gt;)&lt;/td&gt;
&lt;td&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td /&gt;
&lt;td /&gt;
&lt;td&gt;|&lt;/td&gt;&lt;td&gt;|&lt;/td&gt;&lt;td&gt;|&lt;/td&gt;
&lt;td /&gt;
&lt;td /&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td /&gt;
&lt;td /&gt;
&lt;td&gt;| &lt;small&gt;&lt;code&gt;add1&lt;/code&gt;&lt;/small&gt;&lt;/td&gt;
&lt;td&gt;| &lt;small&gt;&lt;code&gt;add1&lt;/code&gt;&lt;/small&gt;&lt;/td&gt;
&lt;td&gt;| &lt;small&gt;&lt;code&gt;add1&lt;/code&gt;&lt;/small&gt;&lt;/td&gt;
&lt;td /&gt;
&lt;td /&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td /&gt;
&lt;td /&gt;
&lt;td&gt;|&lt;/td&gt;&lt;td&gt;|&lt;/td&gt;&lt;td&gt;|&lt;/td&gt;
&lt;td /&gt;
&lt;td /&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td /&gt;
&lt;td /&gt;
&lt;td&gt;V &lt;/td&gt;
&lt;td&gt;V &lt;/td&gt;
&lt;td&gt;V &lt;/td&gt;
&lt;td /&gt;
&lt;td /&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td /&gt;
&lt;td&gt;&lt;code&gt;(list &lt;/code&gt;&lt;/td&gt;
&lt;td&gt;2 &lt;/td&gt;
&lt;td&gt;3 &lt;/td&gt;
&lt;td&gt;4 &lt;/td&gt;
&lt;td&gt;)&lt;/td&gt;
&lt;td /&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;
Another way of thinking about calling &lt;code&gt;map&lt;/code&gt; with a function
&lt;code&gt;f&lt;/code&gt; and list &lt;code&gt;(list
&lt;/code&gt;&lt;i&gt;i&lt;sub&gt;0&lt;/sub&gt; i&lt;sub&gt;1&lt;/sub&gt; ... i&lt;sub&gt;n-1&lt;/sub&gt;
&lt;/i&gt;&lt;code&gt;)&lt;/code&gt;,
&lt;blockquote&gt;
&lt;center&gt;
&lt;code&gt;(map f&lt;/code&gt; &lt;code&gt;(list
&lt;/code&gt;&lt;i&gt;i&lt;sub&gt;0&lt;/sub&gt; i&lt;sub&gt;1&lt;/sub&gt; ... i&lt;sub&gt;n-1&lt;/sub&gt;
&lt;/i&gt;&lt;code&gt;)&lt;/code&gt; &lt;code&gt;)&lt;/code&gt;

=

&lt;code&gt;(list
&lt;/code&gt;
&lt;code&gt;(f &lt;/code&gt;&lt;i&gt;i&lt;sub&gt;0&lt;/sub&gt;&lt;/i&gt;&lt;code&gt;)&lt;/code&gt; 
&lt;code&gt;(f &lt;/code&gt;&lt;i&gt;i&lt;sub&gt;1&lt;/sub&gt;&lt;/i&gt;&lt;code&gt;)&lt;/code&gt; 
...
&lt;code&gt;(f &lt;/code&gt;&lt;i&gt;i&lt;sub&gt;n-1&lt;/sub&gt;&lt;/i&gt;&lt;code&gt;)&lt;/code&gt; 

&lt;code&gt;)&lt;/code&gt;
&lt;/center&gt;
&lt;/blockquote&gt;

Another loop is &lt;code&gt;build-list&lt;/code&gt; that consumes a Number
&lt;i&gt;n&lt;/i&gt; and a function &lt;i&gt;f&lt;/i&gt; with contract &lt;code&gt;(Number
-&lt;/code&gt;&lt;i&gt;X&lt;/i&gt;&lt;code&gt;)&lt;/code&gt;.  It produces a list with &lt;i&gt;n&lt;/i&gt; items, where the n&lt;sup&gt;th&lt;/sup&gt; item is the result of calling &lt;i&gt;f&lt;/i&gt; on &lt;i&gt;n&lt;/i&gt;.  That is:

&lt;blockquote&gt;
&lt;center&gt;
&lt;code&gt;(build-list&lt;/code&gt; &lt;i&gt;n&lt;/i&gt; &lt;i&gt;f&lt;/i&gt; &lt;code&gt;)&lt;/code&gt;
=
&lt;code&gt;(list&lt;/code&gt; 
&lt;code&gt;(&lt;/code&gt;
&lt;i&gt;f&lt;/i&gt;
&lt;code&gt; 0)&lt;/code&gt;

&lt;code&gt;(&lt;/code&gt;
&lt;i&gt;f&lt;/i&gt;
&lt;code&gt; 1)&lt;/code&gt;

...

&lt;code&gt;(&lt;/code&gt;
&lt;i&gt;f&lt;/i&gt; &lt;i&gt;n-1&lt;/i&gt;
&lt;code&gt; )&lt;/code&gt;

&lt;code&gt;)&lt;/code&gt;

&lt;/center&gt;
&lt;/blockquote&gt;

Here is an example:
&lt;blockquote&gt;
&lt;pre&gt;
;; id: X - X
;; identity function
(define (id x) x)

;; simple-list: Number
produce a list of numbers from 0 to n-1
(define (simple-list n)
  (build-list n id))

;; Examples
(equal? (simple-list 0) empty)
(equal? (simple-list 10) (list 0 1 2 3 4 5 6 7 8 9))
&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000035.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000035.html</guid><pubdate>Thursday, March 10th, 2005 9:37:58am</pubdate></item><item><title>Tuesday, March 8th, 2005 10:49:21pm</title><description>&lt;div&gt;

&lt;p&gt;
Since we're a bit behind and school may be closed tomorrow Assignment
8 will be due Thursday 3/9.
&lt;/p&gt;


&lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000034.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000034.html</guid><pubdate>Tuesday, March 8th, 2005 10:49:21pm</pubdate></item><item><title>Sunday, March 6th, 2005 11:14:28am</title><description>&lt;div&gt;

I hope you all had a nice break.  I have made assignment 8 due this
Wednesday, 3/9, because we will cover loops on Monday.  In addition, I
have changed the description so that the data structure you're using
is called &lt;code&gt;Auto&lt;/code&gt;, not &lt;code&gt;Car&lt;/code&gt;.  If you have
started the assignment you will have noticed that defining a structure
called &lt;code&gt;car&lt;/code&gt; doesn't work.  This is because
&lt;code&gt;car&lt;/code&gt; and &lt;code&gt;cdr&lt;/code&gt; are another terms for
&lt;code&gt;first&lt;/code&gt; and &lt;code&gt;rest&lt;/code&gt;, respectively; but just not
as intuitive.

&lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000033.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000033.html</guid><pubdate>Sunday, March 6th, 2005 11:14:28am</pubdate></item><item><title>Wednesday, February 23rd, 2005 6:18:50pm</title><description>&lt;div&gt;

A student (and a good one) challenged that this program, for additional program #1, works:
&lt;pre&gt;
;; find-sublist: LoS LoS - Number
;; retuns the number of times pat occurs in big
(define (find-sublist big pat)
  (cond
    [(or (empty? pat) (empty? big)) 0]
    [(boolean=? (compare big pat) false)
     (find-sublist (rest big) pat)]
    [else (+ 1 (find-sublist (rest big) pat))]))

;; compare: LoS LoS - Boolean
;; returns true if the first series of big is found in pat
(define (compare big pat)
  (cond
    [(empty? pat) true]
    [(symbol=? (first big) (first pat))
     (compare (rest big) (rest pat))]
    [else false]))
&lt;/pre&gt;
I say it doesn't... can you find the error in it.  Hint, here are some &lt;a href="times.ss"&gt;tests&lt;/a&gt; that fail.
&lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000032.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000032.html</guid><pubdate>Wednesday, February 23rd, 2005 6:18:50pm</pubdate></item><item><title>Wednesday, February 23rd, 2005 5:57:18pm</title><description>&lt;div&gt;

Before coming to lab this Friday, read &lt;a href="Labs/lab06/intro.ss"&gt;the introduction&lt;/a&gt;.

&lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000031.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000031.html</guid><pubdate>Wednesday, February 23rd, 2005 5:57:18pm</pubdate></item><item><title>Monday, February 21st, 2005 7:53:12am</title><description>&lt;div&gt;

Michael will hold office hours this Tuesday, 2/22, from 2:30-4:30pm.
Sarah will hold office hours on Wednesday, 2/23 from 11am-1pm.  Here
is the material from last Monday and Thursday's class:
&lt;ul&gt;
&lt;li&gt;&lt;a href="02-14.tar.gz"&gt;02-14.tar.gz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="02-17.tar.gz"&gt;02-17.tar.gz&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000030.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000030.html</guid><pubdate>Monday, February 21st, 2005 7:53:12am</pubdate></item><item><title>Monday, February 21st, 2005 7:53:05am</title><description>&lt;div&gt;

John Patota expressed an interest in using the newsgroup as a means of
communication in this class, and I back him up 100 percent.  This is a
valuable tool to help solve problems and find answers.  Kindly, John
has written up instructions for using the news group under &lt;a href="http://www.mozilla.org/projects/thunderbird/"&gt;thunderbird&lt;/a&gt;.
&lt;br /&gt;
Here they are:
&lt;ol&gt;
&lt;li&gt;Click on File-New-Account&lt;/li&gt;
&lt;li&gt;Select the Newsgroup account option&lt;/li&gt;
&lt;li&gt;Enter in your name and e-mail address&lt;/li&gt;
&lt;li&gt;The Newsgroup Server is localhost&lt;/li&gt;
&lt;li&gt;Enter any name you want as the account name &lt;/li&gt;
&lt;/ol&gt;

Now go into SSH Secure Shell Client (Windows)**:

&lt;ol&gt;
&lt;li&gt;Start up the client&lt;/li&gt;
&lt;li&gt;Select the &lt;b&gt;E&lt;/b&gt;dit menu, and choose &lt;i&gt;settings&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;Under the &lt;i&gt;Profile Settings&lt;/i&gt; menu, choose &lt;i&gt;tunneling&lt;/i&gt;, then select &lt;i&gt;outgoing&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;Click &lt;i&gt;Add&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;Pick a display name (e.g., "news")&lt;/li&gt;
&lt;li&gt;Select TCP as your protocol&lt;/li&gt;
&lt;li&gt;Enter 1119 as the port number&lt;/li&gt;
&lt;li&gt;Make sure the &lt;i&gt;Allow local connections only&lt;/i&gt; is checked&lt;/li&gt;
&lt;li&gt;Enter &lt;i&gt;news.ccs.neu.edu&lt;/i&gt; as the destination host&lt;/li&gt;
&lt;li&gt;Enter port 119 as the destination port&lt;/li&gt;
&lt;li&gt;Click Enter &lt;/li&gt;
&lt;/ol&gt;

Lastly, go back to thunderbird:

&lt;ol&gt;
&lt;li&gt;right click on the newsgroups icon&lt;/li&gt;
&lt;li&gt;select "subscribe"&lt;/li&gt;
&lt;li&gt;navigate to ccs.courses.csu211&lt;/li&gt;
&lt;li&gt;click on the check mark to the right and press ok &lt;/li&gt;
&lt;/ol&gt;

I wrote that assuming users also were forwarding an outgoing
connection with smtp.ccs.neu.edu on port 25 as well.  Information on
this can be found on the System's &lt;a href="http://www.ccs.neu.edu/howto/howto-windows-sshtunneling.html"&gt;howto
page&lt;/a&gt;.


&lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000029.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000029.html</guid><pubdate>Monday, February 21st, 2005 7:53:05am</pubdate></item><item><title>Friday, February 18th, 2005 11:38:50am</title><description>&lt;div&gt;

Homework 7 will be due on Wednesday 2/23, not Monday.  I'd suggest you
get it done earlier than this, though.  Again, the second part of this
course is often harder for many students; so don't get behind.

&lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000028.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000028.html</guid><pubdate>Friday, February 18th, 2005 11:38:50am</pubdate></item><item><title>Monday, February 14th, 2005 10:48:12am</title><description>&lt;div&gt;

The exam results are &lt;a href="exam1"&gt;here&lt;/a&gt;.  These are &lt;a href="http://en.wikipedia.org/wiki/Histogram"&gt;histogram&lt;/a&gt;s of the
individual problems, the final score, and one composite of them all.
Overall the class did quite well with a median score of about 46/50.
Here is an additional breakdown.  The problems are "#1" through "#6"
and the total score is &lt;b&gt;Total&lt;/b&gt;:

&lt;blockquote&gt;
&lt;table border="0" cellpadding="1" cellspacing="3"&gt;
&lt;tr&gt;&lt;th align="left"&gt;Result&lt;/th&gt;&lt;th align="right"&gt;#1&lt;/th&gt;&lt;th align="right"&gt;#2&lt;/th&gt;&lt;th align="right"&gt;#3&lt;/th&gt;&lt;th align="right"&gt;#4&lt;/th&gt;&lt;th align="right"&gt;#5&lt;/th&gt;&lt;th align="right"&gt;#6&lt;/th&gt;&lt;th align="right"&gt;Total&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td align="left"&gt;&lt;b&gt;max&lt;/b&gt;&lt;/td&gt; &lt;td align="right"&gt;8&lt;/td&gt;	&lt;td align="right"&gt;10&lt;/td&gt;	&lt;td align="right"&gt;10&lt;/td&gt;	&lt;td align="right"&gt;12&lt;/td&gt;	&lt;td align="right"&gt;10&lt;/td&gt;	&lt;td align="right"&gt;9&lt;/td&gt;	&lt;td align="right"&gt;58&lt;/td&gt;	&lt;/tr&gt;
&lt;tr&gt;&lt;td align="left"&gt;&lt;b&gt;min&lt;/b&gt;&lt;/td&gt; &lt;td align="right"&gt;2&lt;/td&gt;	&lt;td align="right"&gt;0&lt;/td&gt;	&lt;td align="right"&gt;0&lt;/td&gt;	&lt;td align="right"&gt;1&lt;/td&gt;	&lt;td align="right"&gt;0&lt;/td&gt;	&lt;td align="right"&gt;0&lt;/td&gt;	&lt;td align="right"&gt;14&lt;/td&gt;	&lt;/tr&gt;
&lt;tr&gt;&lt;td align="left"&gt;&lt;b&gt;median&lt;/b&gt;&lt;/td&gt; &lt;td align="right"&gt;8&lt;/td&gt;	&lt;td align="right"&gt;10&lt;/td&gt;	&lt;td align="right"&gt;7&lt;/td&gt;	&lt;td align="right"&gt;10&lt;/td&gt;	&lt;td align="right"&gt;7&lt;/td&gt;	&lt;td align="right"&gt;5&lt;/td&gt;	&lt;td align="right"&gt;45.5&lt;/td&gt;	&lt;/tr&gt;
&lt;tr&gt;&lt;td align="left"&gt;&lt;b&gt;mean&lt;/b&gt;&lt;/td&gt; &lt;td align="right"&gt;7.07&lt;/td&gt;	&lt;td align="right"&gt;9.07&lt;/td&gt;	&lt;td align="right"&gt;6.30&lt;/td&gt;	&lt;td align="right"&gt;9.61&lt;/td&gt;	&lt;td align="right"&gt;6.76&lt;/td&gt;	&lt;td align="right"&gt;4.73&lt;/td&gt;	&lt;td align="right"&gt;43.57&lt;/td&gt;	&lt;/tr&gt;
&lt;tr&gt;&lt;td align="left"&gt;&lt;b&gt;stddev&lt;/b&gt;&lt;/td&gt; &lt;td align="right"&gt;1.52&lt;/td&gt;	&lt;td align="right"&gt;2.15&lt;/td&gt;	&lt;td align="right"&gt;3.13&lt;/td&gt;	&lt;td align="right"&gt;2.26&lt;/td&gt;	&lt;td align="right"&gt;2.84&lt;/td&gt;	&lt;td align="right"&gt;2.96&lt;/td&gt;	&lt;td align="right"&gt;11.06&lt;/td&gt;	&lt;/tr&gt;
&lt;tr&gt;&lt;td align="left"&gt;&lt;b&gt;mode&lt;/b&gt;&lt;/td&gt; &lt;td align="right"&gt;8&lt;/td&gt;	&lt;td align="right"&gt;10&lt;/td&gt;	&lt;td align="right"&gt;10&lt;/td&gt;	&lt;td align="right"&gt;11&lt;/td&gt;	&lt;td align="right"&gt;6&lt;/td&gt;	&lt;td align="right"&gt;4&lt;/td&gt;	&lt;td align="right"&gt;48&lt;/td&gt;	&lt;/tr&gt;
&lt;/table&gt;


&lt;/blockquote&gt;

I will hand the hard copies back in class today (2/14).  If you did
well, congratulations!  But, &lt;em&gt;do not&lt;/em&gt; let up.  The rest of this
course tends to give students more a problem than the first half.
But, if you did do well congratulations!

&lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000027.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000027.html</guid><pubdate>Monday, February 14th, 2005 10:48:12am</pubdate></item><item><title>Thursday, February 10th, 2005 6:27:53pm</title><description>&lt;div&gt;

No lab Friday (2/11), enjoy it, go skiing!

&lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000026.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000026.html</guid><pubdate>Thursday, February 10th, 2005 6:27:53pm</pubdate></item><item><title>Thursday, February 10th, 2005 2:32:55pm</title><description>&lt;div&gt;

The exam location has changed to 13 Snell Library.  Same time:
6:30-9:30pm.

&lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000025.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000025.html</guid><pubdate>Thursday, February 10th, 2005 2:32:55pm</pubdate></item><item><title>Wednesday, February 9th, 2005 6:37:23pm</title><description>&lt;div&gt; 

&lt;p&gt;
Michael will hold office hours from 12-2pm tomorrow (2/10) in the
regular place.  I, also, have my office hours, so please come with
questions or just come if you feel lost.  Remember, analyze the data,
make a template of how one would process that data, make some
examples, then start to write functions.
&lt;/p&gt;

&lt;p&gt;
Good luck tomorrow in the exam!
&lt;/p&gt;

&lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000024.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000024.html</guid><pubdate>Wednesday, February 9th, 2005 6:37:23pm</pubdate></item><item><title>Tuesday, February 8th, 2005 8:56:38am</title><description>&lt;div&gt;

Sarah will hold office hours Wednesday (Feb 9) from 10am-12pm in the
usual place.
&lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000023.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000023.html</guid><pubdate>Tuesday, February 8th, 2005 8:56:38am</pubdate></item><item><title>Monday, February 7th, 2005 5:48:46pm</title><description>&lt;div&gt;

Examples are &lt;a href="02-07/league.scm"&gt;here&lt;/a&gt;.

&lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000022.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000022.html</guid><pubdate>Monday, February 7th, 2005 5:48:46pm</pubdate></item><item><title>Saturday, February 5th, 2005 9:11:47am</title><description>&lt;div&gt; 

Remember the first midterm will be this Thursday (2/10) from
6:30-9:30pm in Richards 200.  It will cover all the material from
class, the book, labs, and homework thusfar.  It will be open book and
open notes.


&lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000021.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000021.html</guid><pubdate>Saturday, February 5th, 2005 9:11:47am</pubdate></item><item><title>Thursday, February 3rd, 2005 6:01:43pm</title><description>&lt;div&gt;
Here is the material from today's class:
&lt;ul&gt;
&lt;li&gt;&lt;a href="02-03/sort.ss"&gt;02-03/sort.ss&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000020.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000020.html</guid><pubdate>Thursday, February 3rd, 2005 6:01:43pm</pubdate></item><item><title>Wednesday, February 2nd, 2005 6:17:17pm</title><description>&lt;div&gt;
Here are the examples from today's class:
&lt;ul&gt;
&lt;li&gt;&lt;a href="02-02/sum.ss"&gt;02-02/sum.ss&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="02-02/expr.ss"&gt;02-02/expr.ss&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
Remember, &lt;b&gt;always&lt;/b&gt; ask the four questions when constructing a template:
&lt;ol&gt;
&lt;li&gt;How many cond lines?&lt;/li&gt;
&lt;li&gt;What are the questions for each line?&lt;/li&gt;
&lt;li&gt;What are the selectors for each line?&lt;/li&gt;
&lt;li&gt;Any arrows (i.e. self-reference)?&lt;/li&gt;
&lt;/ol&gt;
For example, if we have the data definition for a list of numbers:
&lt;blockquote&gt;
&lt;pre&gt;
;; A ListOfNumber is one of
;; -- empty
;; -- (cons Number ListOfNumber)
&lt;/pre&gt;
&lt;/blockquote&gt;
We ask the first question:
&lt;blockquote&gt;
&lt;em&gt;How many cond lines?&lt;/em&gt;
&lt;/blockquote&gt;
and construct the outline of the template:
&lt;blockquote&gt;
&lt;code&gt;&lt;font color="green"&gt;;; f: ListOfNumber - ??&lt;/font&gt;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;&lt;font color="green"&gt;(define (f los)&lt;/font&gt;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;&lt;font color="green"&gt; (cond&lt;/font&gt;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;&lt;font color="green"&gt;  [ ... ]&lt;/font&gt;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;&lt;font color="green"&gt;  [ ... ] ))&lt;/font&gt;&lt;/code&gt;&lt;br /&gt;
&lt;/blockquote&gt;

Then ask question 2:
&lt;blockquote&gt;
&lt;em&gt;What are the questions for each line?&lt;/em&gt;
&lt;/blockquote&gt;

and determine the questions to ask:
&lt;blockquote&gt;
&lt;code&gt;;; f: ListOfNumber - ??&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;(define (f los)&lt;/code&gt;&lt;br /&gt;
&lt;code&gt; (cond&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;  [&lt;font color="green"&gt;(empty? los)&lt;/font&gt; ... ]&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;  [&lt;font color="green"&gt;(cons? los)&lt;/font&gt; ... ] ))&lt;/code&gt;&lt;br /&gt;
&lt;/blockquote&gt;

The ask question 3:
&lt;blockquote&gt;
&lt;em&gt;What are the selectors for each line?&lt;/em&gt;
&lt;/blockquote&gt;

and determine how to take apart our input:
&lt;blockquote&gt;
&lt;code&gt;;; f: ListOfNumber - ??&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;(define (f los)&lt;/code&gt;&lt;br /&gt;
&lt;code&gt; (cond&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;  [(empty? los) &lt;font color="green"&gt;...&lt;/font&gt; ]&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;  [(cons? los) 
                  ... &lt;font color="green"&gt;(first los)&lt;/font&gt; ... 
                  ... &lt;font color="green"&gt;(rest los)&lt;/font&gt;... ] ))&lt;/code&gt;&lt;br /&gt;
&lt;/blockquote&gt;

Finally, ask question 4:
&lt;blockquote&gt;
&lt;em&gt;Any arrows (i.e. self-reference)?&lt;/em&gt;
&lt;/blockquote&gt;

and the answer is &lt;b&gt;YES&lt;/b&gt;, from &lt;code&gt;ListOfNumber&lt;/code&gt; in line
2.  For every arrow, we get recursion:
&lt;blockquote&gt;
&lt;code&gt;;; f: ListOfNumber - ??&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;(define (f los)&lt;/code&gt;&lt;br /&gt;
&lt;code&gt; (cond&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;  [(empty? los) ... ]&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;  [(cons? los) 
                  ... (first los) ... 
                  ... &lt;font color="green"&gt;(f &lt;/font&gt;(rest los)&lt;font color="green"&gt;)&lt;/font&gt;... ] ))&lt;/code&gt;&lt;br /&gt;
&lt;/blockquote&gt;


&lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000019.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000019.html</guid><pubdate>Wednesday, February 2nd, 2005 6:17:17pm</pubdate></item><item><title>Monday, January 31st, 2005 6:00:33pm</title><description>&lt;div&gt;
Here is the material from class today:
&lt;ul&gt;
&lt;li&gt;&lt;a href="01-31/red-green.ss"&gt;01-31/red-green.ss&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
Also, as I stated in class today, if you receive a 0 on a quiz, that
week's homework (turned in the Monday before that lab) will be
deducted 50%; if you get a 1 nothing will happen; if you miss lab you
will receive a 0 on that homework.
&lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000018.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000018.html</guid><pubdate>Monday, January 31st, 2005 6:00:33pm</pubdate></item><item><title>Thursday, January 27th, 2005 6:31:51pm</title><description>&lt;div&gt;

Examples from today's class are here:
&lt;ul&gt;
&lt;li&gt;&lt;a href="01-27/negate.ss"&gt;negate.ss&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="01-27/bw-simple.ss"&gt;bw-simple.ss&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="01-27/bw.ss"&gt;bw.ss&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
Remeber the main example in class today converting images from color
to black and white (or greyscale).  Our goal was to write a program called &lt;code&gt;image-bw&lt;/code&gt; that behaved in the following manner:
&lt;blockquote&gt;
&lt;code&gt;(image-bw &lt;/code&gt;&lt;img src="01-27/elmo.png" /&gt;&lt;code&gt;) ; should produce &lt;/code&gt; &lt;img src="01-27/elmo-bw.png" /&gt;
&lt;/blockquote&gt;

&lt;p&gt;
Knowledge about images or colors was &lt;em&gt;not&lt;/em&gt; important.  The
important concept that we learned today, was that when we process
lists of structures our data definition changes; and when our data
definition changes our programs for processing that data changes; so
we need to change our templates.
&lt;/p&gt;

&lt;p&gt;
The purpose of a template is to provide you with a systematic way of
processing data.  When you are processing a list there are certain
things that remain constant over all types of lists.  Consider the data definitions for a list of &lt;font color="red"&gt;numbers&lt;/font&gt; and a list of &lt;font color="blue"&gt;strings&lt;/font&gt;; paying close attention to the difference between the two:

&lt;blockquote&gt;

&lt;code&gt;;; A Listof&lt;font color="red"&gt;Number&lt;/font&gt; if either&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;;; -- empty&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;;; -- (cons &lt;font color="red"&gt;Number&lt;/font&gt; ListOf&lt;font color="red"&gt;Number&lt;/font&gt;)&lt;/code&gt;&lt;br /&gt;

&lt;br /&gt;

&lt;code&gt;;; A Listof&lt;font color="blue"&gt;String&lt;/font&gt; if either&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;;; -- empty&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;;; -- (cons &lt;font color="blue"&gt;String&lt;/font&gt; ListOf&lt;font color="blue"&gt;String&lt;/font&gt;)&lt;/code&gt;&lt;br /&gt;

&lt;/blockquote&gt;

So, we see that the only difference between the two is what type the &lt;code&gt;first&lt;/code&gt; of the list is.  So, let's write the templates for these data definitions:

&lt;blockquote&gt;

&lt;code&gt;;; ListOf&lt;font color="red"&gt;Number&lt;/font&gt; - ??&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;(define (f l)&lt;/code&gt;&lt;br /&gt;
&lt;code&gt; (cond&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;  [(empty? l) ...]&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;  [(cons? l) ... (&lt;font color="red"&gt;number-function&lt;/font&gt; (first l)) ... (f (rest l)) ...]))&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;

&lt;code&gt;;; ListOf&lt;font color="blue"&gt;String&lt;/font&gt; - ??&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;(define (f l)&lt;/code&gt;&lt;br /&gt;
&lt;code&gt; (cond&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;  [(empty? l) ...]&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;  [(cons? l) ... (&lt;font color="blue"&gt;string-function&lt;/font&gt; (first l)) ... (f (rest l)) ...]))&lt;/code&gt;&lt;br /&gt;

&lt;/blockquote&gt;

Not much is different between the two, except what we do to the
&lt;code&gt;first&lt;/code&gt; of the lists... but we expected that, because the
change in the template is directly from the difference in the data
definition.  But what if we consider a list of &lt;code&gt;&lt;font color="green"&gt;Posn&lt;/font&gt;&lt;/code&gt;?  Let's first consider the data
definitions:

&lt;blockquote&gt;

&lt;code&gt;;; A Posn is a (make-posn x y)&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;;; where x and y are Numbers&lt;/code&gt;&lt;br /&gt;

&lt;br /&gt;

&lt;code&gt;;; A Listof&lt;font color="green"&gt;Posn&lt;/font&gt; if either&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;;; -- empty&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;;; -- (cons &lt;font color="green"&gt;Posn&lt;/font&gt; ListOf&lt;font color="green"&gt;Posn&lt;/font&gt;)&lt;/code&gt;&lt;br /&gt;
&lt;/blockquote&gt;
Then, we can write the template for lists of &lt;code&gt;Posn&lt;/code&gt;s.

&lt;blockquote&gt;

&lt;code&gt;;; ListOf&lt;font color="green"&gt;Posn&lt;/font&gt; - ??&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;(define (f l)&lt;/code&gt;&lt;br /&gt;
&lt;code&gt; (cond&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;  [(empty? l) ...]&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;  [(cons? l) ... (&lt;font color="green"&gt;posn-function&lt;/font&gt; (first l)) ... (f (rest l)) ...]))&lt;/code&gt;&lt;br /&gt;

&lt;/blockquote&gt;

This is close, but we actually can take our data definition for lists of &lt;code&gt;Posn&lt;/code&gt;s a bit further, because we know what makes up a &lt;code&gt;Posn&lt;/code&gt;; so we know how to take it apart.

&lt;blockquote&gt;

&lt;code&gt;;; A Listof&lt;font color="green"&gt;Posn&lt;/font&gt; if either&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;;; -- empty&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;;; -- (cons &lt;font color="green"&gt;(make-posn x y)&lt;/font&gt; ListOf&lt;font color="green"&gt;Posn&lt;/font&gt;)&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;;; where x and y are Numbers&lt;/code&gt;&lt;br /&gt;
&lt;/blockquote&gt;

So, since our data definition changes our template &lt;em&gt;must reflect
this change&lt;/em&gt;!!!

&lt;blockquote&gt;

&lt;code&gt;;; ListOf&lt;font color="green"&gt;Posn&lt;/font&gt; - ??&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;(define (f l)&lt;/code&gt;&lt;br /&gt;
&lt;code&gt; (cond&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;  [(empty? l) ...]&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;  [(cons? l) ... (&lt;font color="green"&gt;(posn-x (first l))&lt;/font&gt; ... 
&lt;font color="green"&gt;(posn-x (first l))&lt;/font&gt; &lt;br /&gt;...  (f (rest l)) ...]))&lt;/code&gt;&lt;br /&gt;

&lt;/blockquote&gt;

&lt;/p&gt;

&lt;p&gt;
So, the main point is our programs always &lt;b&gt;FOLLOW THE DATA&lt;/b&gt;!!!
&lt;/p&gt;

&lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000017.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000017.html</guid><pubdate>Thursday, January 27th, 2005 6:31:51pm</pubdate></item><item><title>Tuesday, January 25th, 2005 6:13:43am</title><description>&lt;div&gt;

Sarah with hold an extra office hour today from 2-3pm.

&lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000016.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000016.html</guid><pubdate>Tuesday, January 25th, 2005 6:13:43am</pubdate></item><item><title>Sunday, January 23rd, 2005 10:16:22pm</title><description>&lt;div&gt;

Because of the school closing on Monday 1/24, homework #3 will be due
at 4:30pm on Tuesday 1/25.

&lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000015.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000015.html</guid><pubdate>Sunday, January 23rd, 2005 10:16:22pm</pubdate></item><item><title>Thursday, January 20th, 2005 5:59:33pm</title><description>&lt;div&gt;

Here are a couple examples from today's class:
&lt;ul&gt;
&lt;li&gt;&lt;a href="0120/contains-red.ss"&gt;contains-red.ss&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="0120/count.ss"&gt;count.ss&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="0120/string-append.ss"&gt;string-append.ss&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="0120/symbol-append.ss"&gt;symbol-append.ss&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000014.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000014.html</guid><pubdate>Thursday, January 20th, 2005 5:59:33pm</pubdate></item><item><title>Thursday, January 20th, 2005 4:13:51pm</title><description>&lt;div&gt;


Additional Problem 1 of homework 3 had a typo in it that asked you to
modify &lt;code&gt;Calendar&lt;/code&gt; so it would keep track of months.  Of
course, it already kept track of months, and you should modify it to
keep track of days.  This has been changed on the assignment.

&lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000013.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000013.html</guid><pubdate>Thursday, January 20th, 2005 4:13:51pm</pubdate></item><item><title>Thursday, January 20th, 2005 10:15:55am</title><description>&lt;div&gt;

Per Sean's request, &lt;a href="0119.ss"&gt;here&lt;/a&gt; is the example from class yesterday.

&lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000012.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000012.html</guid><pubdate>Thursday, January 20th, 2005 10:15:55am</pubdate></item><item><title>Thursday, January 20th, 2005 9:24:48am</title><description>&lt;div&gt; 

The first assignment included a 30-word description of any problems
you encounted.  This is now optional and should be a maximum of 30
words.  The purpose of this is twofold: First, I want to hear feedback
about problems you're having and questions you have that you may not
want to voice in class or office hours.  Secondly, the 30-word maximum
is to get you to write clearly and "to the point"; this will be very
valuable in anything you go on to do.

&lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000011.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000011.html</guid><pubdate>Thursday, January 20th, 2005 9:24:48am</pubdate></item><item><title>Monday, January 17th, 2005 11:24:59am</title><description>&lt;div&gt;

&lt;p&gt;
You all should have picked up your graded homework #1's in lab.  If
you didn't, please get them from me.  The average was about 16.1 out
of 26.  Nine of you did not submit homework; if you are one of these
people and I have you email address you will have received a message
from me asking me to explain why this was the case?
&lt;/p&gt;

&lt;p&gt;
Reminder: Homework #2 is due 1/18 by 4:30, and your contract is due by
class time on 1/19.  See &lt;a href="http://www.ccs.neu.edu/home/jpalm/211-s05/general.html"&gt;the
general page&lt;/a&gt; for information about your contract.
&lt;/p&gt;


&lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000010.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000010.html</guid><pubdate>Monday, January 17th, 2005 11:24:59am</pubdate></item><item><title>Thursday, January 13th, 2005 3:07:02pm</title><description>&lt;div&gt; 

You will all sign up for lab partners tomorrow.  At this time you
&lt;b&gt;must&lt;/b&gt; -- at least -- get your partner's name, email, and phone
number.  Since the second homework is due Tuesday and your will not
partner up until Friday, the first homework may be done in partners or
indidivually.  Either, please indicate clearly who worked on any
homework handed in.  


&lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000009.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000009.html</guid><pubdate>Thursday, January 13th, 2005 3:07:02pm</pubdate></item><item><title>Wednesday, January 12th, 2005 6:27:01pm</title><description>&lt;div&gt;

Here is John Patota's explanation of the RSS thingy for the blog.

&lt;blockquote&gt;
&lt;p&gt;A few days ago I asked what that RSS link was on the top of the blog. As it turns out, RSS is an easy way to distribute news. Whenever Jeff posts something new on the blog, it gets sent directly to your e-mail messaging program (like Mozilla's thunderbird)&lt;/p&gt;

&lt;p&gt;If you use thunderbird, setting this feature up is really easy.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
create a new RSS News and Blogs account. Put any name you wish for the label of the account. The default "News and Blogs" works fine.
&lt;/li&gt;

&lt;li&gt;
You'll see a new icon which looks like the world come up on the left hand side of the screen, in the Folders panel. In the main window, click on "Manage Subscriptions" which will bring up a new box.
&lt;/li&gt;

&lt;li&gt;
Add a new account. Remember to input "http://www.ccs.neu.edu/home/jpalm/211-s05/index.xml" and click OK.
&lt;/li&gt;

&lt;/ol&gt;

&lt;p&gt;And your done&lt;/p&gt;

&lt;p&gt;This new RSS thing is becoming very popular. Tons of websites are sharing to come out with things like this. An example would be our very own Northeastern News. Their RSS feed is "http://www.nu-news.com/articles.rss" 
&lt;/p&gt;

&lt;/blockquote&gt;

Thanks for the note, John.

&lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000008.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000008.html</guid><pubdate>Wednesday, January 12th, 2005 6:27:01pm</pubdate></item><item><title>Tuesday, January 11th, 2005 2:53:00pm</title><description>&lt;div&gt;

&lt;p&gt;
Many of you forgot to write the 30-word description of problems you
encountered on your homework, and those people lost points.  You will
lose points for this every time for forgetting this part.  Also, many
of you turned in loose papers, and this is unacceptable.  You must
staple or paper-clip your homework.
&lt;/p&gt;

&lt;p&gt;
My office hours will be on Thursday from 2:30-4:30pm.  Please come by
if you have any questions or if you're running into problems on the
homework.
&lt;/p&gt;

&lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000007.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000007.html</guid><pubdate>Tuesday, January 11th, 2005 2:53:00pm</pubdate></item><item><title>Monday, January 10th, 2005 6:34:29am</title><description>&lt;div&gt;

&lt;p&gt;
If you have not done so, please read the 'Earning a Grade' section of
the &lt;a href="general.html"&gt;General Information&lt;/a&gt; page.  It states
the requirements for earning a greade in this course.  I will mention
this at today's lecture.
&lt;/p&gt;

&lt;p&gt;
Also, our tutor for the term will be &lt;a href="http://www.ccs.neu.edu/home/house"&gt;Sarah House&lt;/a&gt;.  She can be
reached at &lt;code&gt;house&lt;/code&gt; &lt;code&gt;@&lt;/code&gt; &lt;code&gt;ccs&lt;/code&gt;
&lt;code&gt;.&lt;/code&gt; &lt;code&gt;neu&lt;/code&gt; &lt;code&gt;.&lt;/code&gt; &lt;code&gt;edu&lt;/code&gt;.
Sarah's primary responsibility will be grading, but will also hold
office hours and pop in lab from time to time.
&lt;/p&gt;

&lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000006.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000006.html</guid><pubdate>Monday, January 10th, 2005 6:34:29am</pubdate></item><item><title>Friday, January 7th, 2005 5:14:00pm</title><description>&lt;div&gt;

Everyone please welcome Michael Everett (everett.m @ neu . edu), he
will be the TA for the Spring.  Michael will run the labs -- starting
this Friday 1/14 -- and hold office hours; these office hours will be
announced next week.

&lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000005.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000005.html</guid><pubdate>Friday, January 7th, 2005 5:14:00pm</pubdate></item><item><title>Thursday, January 6th, 2005 6:39:16pm</title><description>&lt;div&gt;
&lt;p&gt;
The &lt;a href="Assignments/1.html"&gt;first assignment&lt;/a&gt; is due
&lt;b&gt;this Monday 1/10 by 4:30&lt;/b&gt;, and all assignments will be due at this
time.  I will post my office hours shortly.  In the mean time send any
questions to me at: &lt;code&gt;jpalm&lt;/code&gt; &lt;code&gt;@&lt;/code&gt; &lt;code&gt;ccs&lt;/code&gt;
&lt;code&gt;.&lt;/code&gt; &lt;code&gt;neu&lt;/code&gt; &lt;code&gt;.&lt;/code&gt; &lt;code&gt;edu&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
Labs will begin next Friday 1/14.  You will learn about the format of
the labs and decide partnerships.  You will complete all labs and
homework (after assignmen #1) in partnerships.  This is how the real
world works, so this is how this class will run.  If you cannot make
this first lab contact Jeff.
&lt;/p&gt;

&lt;p&gt;
And, remember to brings your name signs next week!
&lt;/p&gt;



&lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000004.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000004.html</guid><pubdate>Thursday, January 6th, 2005 6:39:16pm</pubdate></item><item><title>Friday, December 31st, 2004 10:50:30am</title><description>&lt;div&gt;
Added the gallery.
&lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000003.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000003.html</guid><pubdate>Friday, December 31st, 2004 10:50:30am</pubdate></item><item><title>Thursday, December 30th, 2004 10:08:28am</title><description>&lt;div&gt;
Welcome to the 211 Blog site for Spring '05. The staff will post important messages here, concerning lectures, projects, presentations, and so on. Make a habit of reading the blog on a daily basis.
&lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000002.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000002.html</guid><pubdate>Thursday, December 30th, 2004 10:08:28am</pubdate></item><item><title>Thursday, December 30th, 2004 8:53:35am</title><description>&lt;div&gt;
Added RSS feed.
&lt;/div&gt;</description><link>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000001.html</link><guid>http://www.ccs.neu.edu/home/jpalm/211-s05/blog.html/../Blog-0000000001.html</guid><pubdate>Thursday, December 30th, 2004 8:53:35am</pubdate></item></channel></rss>