So I’m taking Programming Languages, one of the most advanced computer science courses at UConn. Theory of Computation gave it a run for its money, but it’s up there, no doubt. And the subject we are studying is the lambda calculus, invented in the 1930s by Alonzo Church who, I might add, had to be a fucking genius. See, the first general purpose computing machine was invented some time around 1945. Sixty years later, we are studing computer science in its most advanced form, which Mr. Church insanely grasped from thin air decades before any sort of practical computing machine ever existed.
My suite-mate Jon, on the other hand, is studying Mathematics. In particular, mathematics which has only been around for about thirty years. He informs me that in the past fifty years many areas of math have rocketed off the shelf–things like differential equations–due mostly because of the advent of fast computers.
In other words, since computers came on the scene, the theory of computation has stagnated, while the theory of mathematics has experienced a renewed interest. Ironic.
Of course, there’s probably a wealth of research in the theory of computation that I just haven’t been exposed to, but from the perspective of two college students, it sure looks silly.
Parallel Systems homework, due Tues, 3:30pm
Study a bit for ‘Socratic Hour’, Wed, 1:00pm
Read ‘Life Itself’ and some other stuff for honors conversion, due Wed, 3:00pm
Write a basic isometric view in java (proof of concept), due Wed, 4:00pm
- Study for Programming languages exam, Thurs, 12:30pm
- Do a draft of UM paper with the changes suggested by the reviewers, due Fri, 2:00pm
So, some things completed, some averted. But I’m still alive. My exam is 18 hours away, which is scary. The renderer I wrote came out pretty well though:

The Mystery of SENK
You can only draw funky study lounges, with green couches in them, so it’s not that exciting, but it’s a big first step. Too bad I was up until 7am this morning writing it.
Parallel Systems homework, due Tues, 3:30pm
- Study a bit for ‘Socratic Hour’, Wed, 1:00pm
- Read ‘Life Itself’ and some other stuff for honors conversion, due Wed, 3:00pm
- Write a basic isometric view in java (proof of concept), due Wed, 4:00pm
- Study for Programming languages exam, Thurs, 12:30pm
Did a sort of shoddy job on that, but it’s done. Blah.
Overall, the fact that I finished that Programming Languages assignment so late was a bad thing. Yesterday I went in to the professor to ask him some questions about the assignment, and he told me that he had already put the solutions on the web site, which is a bad thing indeed. Of course, I hadn’t seen them, still haven’t. But it forces him into a position of uneasy trust, which is not what I want at all. He told me to finish it and hand it in yesterday, which I did, but I still have a very sour taste in my mouth.
This professor taught one of the courses last semester that I did worse in than I hoped. I really wanted to turn things around for this class, but so far I am off to a bad start. I have a midterm in this class on Thursday that I haven’t even started yet. Bad. Large items of academic pursuit that need to be finished in the next few days:
- Parallel Systems homework, due Tues, 3:30pm
- Study a bit for ‘Socratic Hour’, Wed, 1:00pm
- Read ‘Life Itself’ and some other stuff for honors conversion, due Wed, 3:00pm
- Write a basic isometric view in java (proof of concept), due Wed, 4:00pm
- Study for Programming languages exam, Thurs, 12:30pm
Of course, I am scheduled to work Wednesday and Thursday morning now, which doesn’t help. I hate to ask for more time off from work, but I will probably have to on at least one of those days. Not enough hours in the day.
I just finished the homework assignment I’ve been bitching about. Here’s the final bit I just wrote:
datatype ''a Set = Empty
| Node of ''a * ''a Set
fun foldsetl F = fn base => fn Empty => base
| Node(x, S) => F(x, foldsetl(F) base S)
fun singleXCrossFunGen x = fn (y, S) => Node((x, y), S)
fun crossSingleXWithSet(x, S) = foldsetl(singleXCrossFunGen x) Empty S;
fun setCrossFunGen S1 = fn (x, S2) => union(crossSingleXWithSet(x, S1), S2);
fun cross(S1, S2) = foldsetl(setCrossFunGen S1) Empty S2;
The jist of this particular part of the assignment was to implement the cross product of two sets in ML without recursion. Of course, I rely on a recursive implementation of foldl for sets, but my feeling from the professor is that this is OK within the context of the assignment. I also just realized (after I handed it in) that I rely on the recursive union. I’m not sure how this would be a problem if foldsetl isn’t. I think the point was to not call cross from within itself.
Either way, I’m glad it’s done. That was one of the most difficult assignments I’ve ever had. Some of the finer points of functional programming represent an incredible conceptual challenge for someone who has done only procedural programming for his whole life. I’ll probably look back on this code and realize that it’s crap, but at the moment it looks pretty magical to me. Certainly different than anything I’ve ever done.
My god, I’ve completed a version of my Programming Languages assignment that actually compiles with something close to the correct signature. Much left to do, and it’s already three and a half days late, but I’m feeling pretty good.