<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>LispCast</title>
    <link>http://www.lispcast.com</link>
    <description>Passion for programming</description>
    <language>en-us</language>
    <pubDate>Wed, 01 Apr 2009 23:13:49 GMT</pubDate>
    <dc:date>2009-04-01T23:13:49Z</dc:date>
    <dc:language>en-us</dc:language>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://www.lispcast.com/drupal/rss.xml" type="application/rss+xml" /><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Fwww.lispcast.com%2Fdrupal%2Frss.xml" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Fwww.lispcast.com%2Fdrupal%2Frss.xml" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Fwww.lispcast.com%2Fdrupal%2Frss.xml" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.bloglines.com/sub/http://www.lispcast.com/drupal/rss.xml" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Fwww.lispcast.com%2Fdrupal%2Frss.xml" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://fusion.google.com/add?feedurl=http%3A%2F%2Fwww.lispcast.com%2Fdrupal%2Frss.xml" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Fwww.lispcast.com%2Fdrupal%2Frss.xml" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
      <title>Programming Language Religions</title>
      <link>http://www.lispcast.com/language-religion.html</link>
      <description>&lt;p&gt;
We have all experienced it: you make an innocent statement about a
    programming language online, and suddenly you are mired in a
    flamewar.  You are labeled a fanboy and flamebait.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Why is choice of programming language such a touchy issue?&lt;/b&gt;
    It's like once you enter into certain areas of the topic of
    programming languages&lt;span id="p15"&gt;*&lt;/span&gt;, you are
    instantly transported to a land of Black and White, good and bad,
    binary logic, of bitter conflict and rivalries between factions.
&lt;/p&gt;
&lt;p&gt;
You can explain why people are so fighty with cognitive
    dissonance.  Learning the intricacies of a programming language
    takes time and effort.  It requires a lot of trial and error,
    along with reframing your fundamental understanding of how to
    approach a problem.  In order to justify such an struggle,
    programmers raise the level of importance of the particular
    features of that programming language, particularly the
    foundational ones.  So any statement that seems to abase the
    language is seen as an insult to your own effort and thought
    process.  Programming language is a personal issue.
&lt;/p&gt;
&lt;p&gt;
If you compound this with the impersonal and anonymous magnifier
    of the internet, where each past statement is indelibly marked
    alongside other comments, and people tending to post before they
    read all of them, and those incendiary one-line comments tend to
    be read more, and all of the other incitements of the expanding
    spiral of discussion threads, you get something like you see
    online all the time.
&lt;/p&gt;
&lt;p&gt;
Unfortunately, there is nothing to do about it.  It appears that,
    like religious or political disputes, they are here to stay.  It's
    the price you pay for being online.&lt;a href="http://www.lispcast.com/"&gt;&lt;img class="trailer" src="lil-lambda.png" /&gt;&lt;/a&gt;
&lt;/p&gt;&lt;hr /&gt;&lt;div&gt;&lt;h4&gt;Notes&lt;/h4&gt;&lt;div class="note" id="note15"&gt;&lt;p&gt;
&lt;span class="aster"&gt;*&lt;/span&gt;Comparative analysis is one.  Typing
    style (static versus dynamic) is another.
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;</description>
      <pubDate>Sun, 29 Mar 2009 05:00:00 GMT</pubDate>
      <guid>http://www.lispcast.com/language-religion.html</guid>
      <dc:date>2009-03-29T05:00:00Z</dc:date>
    </item>
    <item>
      <title>Investigations into Terracotta</title>
      <link>http://www.lispcast.com/terracotta-integration.html</link>
      <description>&lt;p&gt;
&lt;a href="http://paul.stadig.name/2009/02/clojure-terracotta-yeah-baby.html" class="citation"&gt;Clojure + Terracotta = Yeah, Baby!&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
I just stumbled across this effort to get Clojure running
    on &lt;a href="http://www.terracotta.org"&gt;Terracotta&lt;/a&gt;, a JVM
    clustering infrastructure.  Terracotta gives your distributed
    JVM's a shared heap, so the possibilities of distributing
    computation are immense.  This kind of thing really gets me going.
    All I need now is a room full of server racks.&lt;a href="http://www.lispcast.com/"&gt;&lt;img class="trailer" src="lil-lambda.png" /&gt;&lt;/a&gt;
&lt;/p&gt;</description>
      <pubDate>Sat, 28 Mar 2009 05:00:00 GMT</pubDate>
      <guid>http://www.lispcast.com/terracotta-integration.html</guid>
      <dc:date>2009-03-28T05:00:00Z</dc:date>
    </item>
    <item>
      <title>Writing map in Haskell</title>
      <link>http://www.lispcast.com/haskell-map.html</link>
      <description>&lt;p&gt;
Recently, I posted an article about why I didn't like Haskell's
    type checker (or really, any of the other type checkers I know
    of) &lt;i&gt;in theory&lt;/i&gt;.  I sensed that it got a lot of flack.  It
    was an idea I had been pinging around in my head for a while.  It
    was not meant as a criticism against Haskell, but a statement of
    my preference.
&lt;/p&gt;
&lt;p&gt;
Someone suggested to me that I post &lt;i&gt;specific&lt;/i&gt; instances of
    things I would like to be able to say in Haskell, but cannot.  It
    appealed to me.  I don't know why.  Perhaps it was his patience,
    which seems to be a rare commodity on the internet.  Instead of
    insulting me for my mistaken views, he actually tried to explain
    my errors to me.  Perhaps, if I gave the examples he requested, I
    would be shown that I really could do what I wanted.  Maybe he
    wouldn't make me feel like a douche for not reading a book on
    Haskell just to write one blog post about it.  This post is for
    him.
&lt;/p&gt;
&lt;p&gt;
I will give a couple of examples of things in Haskell that violate
    my own personal taste.  They are both examples of failures of the
    type system to encompass my intent.
&lt;/p&gt;
&lt;p&gt;
So, here is the first thing that I remember trying to do in
    Haskell, before realizing it was impossible.  It is something that
    is explicitly disallowed (having values of different types in the
    same list).  My understanding of what Haskell meant by type was
    faulty.  I did not get the difference between a type and a type
    class.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="/files/listofnumbers.hs"&gt;Download listofnumbers.hs&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;code&gt;&lt;pre class="bigcode"&gt;&lt;span class="c1"&gt;--List Polymorphism&lt;/span&gt;&lt;br /&gt;&lt;span class="c1"&gt;--Note that I have been told that this is possible in some&lt;/span&gt;&lt;br /&gt;&lt;span class="c1"&gt;--controversial extension&lt;/span&gt;&lt;br /&gt;&lt;span class="nf"&gt;sum&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;1.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;5.9&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;
I thought that the type of the list would
    be &lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="kt"&gt;Num&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;, not &lt;code&gt;&lt;span class="kt"&gt;Num&lt;/span&gt;
    &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="ow"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;.  I was wrong, but I don't think I should have
    been.  Addition is blind to what type of number it is, and summing
    should be, too.
&lt;/p&gt;
&lt;p&gt;
There are some standard workarounds for the previous example.  The
    next example shows perhaps a more practical reason for wanting
    lists of different types.  Unfortunately, I can't even express the
    broken Haskell code.  I've tried.  In Haskell, how do you express
    a function of n arguments, where n is unknown?  So I'll do it in
    Clojure.  I apologize if it makes the conceptual translation
    difficult.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="/files/mymap.clj"&gt;Download mymap.clj&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;code&gt;&lt;pre class="bigcode"&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;defn &lt;/span&gt;&lt;span class="nv"&gt;mymap&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="k"&gt;fn &lt;/span&gt;&lt;span class="nv"&gt;&amp;amp;&lt;/span&gt; &lt;span class="nv"&gt;lsts&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;br /&gt;   &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;let &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;ls&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;map &lt;/span&gt;&lt;span class="nv"&gt;first&lt;/span&gt; &lt;span class="nv"&gt;lsts&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;&lt;br /&gt;      &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;some &lt;/span&gt;&lt;span class="nv"&gt;nil?&lt;/span&gt; &lt;span class="nv"&gt;ls&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;br /&gt;          &lt;span class="nv"&gt;nil&lt;/span&gt;&lt;br /&gt;          &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;lazy-seq&lt;/span&gt;&lt;br /&gt;                &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;cons &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;apply &lt;/span&gt;&lt;span class="k"&gt;fn &lt;/span&gt;&lt;span class="nv"&gt;ls&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;apply &lt;/span&gt;&lt;span class="nv"&gt;mymap&lt;/span&gt; &lt;span class="k"&gt;fn &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;map &lt;/span&gt;&lt;span class="nv"&gt;rest&lt;/span&gt; &lt;span class="nv"&gt;lsts&lt;/span&gt;&lt;span class="p"&gt;)))))))&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;
It's a function that takes a function fn and n lists of arguments.
    fn takes n arguments.  A new list is created whose members are the
    application of fn to the corresponding elements of the lists of
    arguments.&lt;span id="p12"&gt;*&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
The best way I found in Haskell was to define several different
    map functions.  There's map1, for functions of one argument, map2
    for functions of 2 arguments, etc.  Each carries basically the
    same functionality.  If Haskell's type system is so advanced, why
    can it not generalize the pattern?  If it is not that advanced,
    why would I want to use it?
&lt;/p&gt;
&lt;p&gt;
Maybe you can do this in Haskell.  I don't know.  I tried a few
    approaches and decided it was fundamentally impossible.  I don't
    know Haskell very well, so please correct me if I'm wrong.
&lt;/p&gt;
&lt;p&gt;
But in the end, it's just an example.  Can Haskell represent a
    generalized function type?  Maybe it can.  But I can always find
    something that Haskell's type checker (or any type system) can't
    deal with.  Without a trapdoor, I will always hit a wall of what I
    can express.&lt;a href="http://www.lispcast.com/"&gt;&lt;img class="trailer" src="lil-lambda.png" /&gt;&lt;/a&gt;
&lt;/p&gt;&lt;div class="addendum"&gt;&lt;h1&gt;Addendum&lt;/h1&gt;&lt;div class="postdate"&gt;2009-04-01&lt;/div&gt;
&lt;p&gt;
I've gotten two very thoughtful comments from my readers.  And,
    well, it turns out you can do both of the things I described
    above.  My mistake.
&lt;/p&gt;
&lt;p&gt;
I also got a pretty good explanation of why you don't want to do
    it in Haskell.  Currying is so common, you need some way of saying
    how many arguments to consume.  So variable arguments are
    generally avoided.
&lt;/p&gt;
&lt;p&gt;
I am starting to reshape my ideas about Haskell.  I have always
    considered it at the forefront of functional programming.  I just
    never wanted to be at the forefront of functional programming.
&lt;/p&gt;
&lt;p&gt;
Lisps still have something over pure functional languages!  You
    probably know what it is.  I daresay that linguistic dynamism,
    that is, being able to compile new code from arbitrary locations
    is pretty darn cool.  But the way things are going, you might be
    able to do that in Haskell, too.
&lt;/p&gt;&lt;/div&gt;&lt;hr /&gt;&lt;div&gt;&lt;h4&gt;Notes&lt;/h4&gt;&lt;div class="note" id="note12"&gt;&lt;p&gt;
&lt;span class="aster"&gt;*&lt;/span&gt;There is absolutely no static type safety
    here.
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;</description>
      <pubDate>Fri, 27 Mar 2009 05:00:00 GMT</pubDate>
      <guid>http://www.lispcast.com/haskell-map.html</guid>
      <dc:date>2009-03-27T05:00:00Z</dc:date>
    </item>
    <item>
      <title>Nice article on small software</title>
      <link>http://www.lispcast.com/small-sofware.html</link>
      <description>&lt;p&gt;
&lt;a href="http://www.27months.com/2009/03/the-virtues-of-small-software/" class="citation"&gt;The Virtues of Small Software&lt;/a&gt;&lt;blockquote id="p28"&gt;&lt;p&gt;
Nowadays we have thousands of times the processing power, memory and storage yet, from the user's perspective, software for the desktop, web and mobile seems to run slower than it should, or used to.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;/p&gt;
&lt;p&gt;
While it does start a bit backwards-looking&lt;span id="p29"&gt;*&lt;/span&gt;, this article wraps it up with a great positive, futurist spin: mobile devices are exploding in Africa and will revive a focus on space and time requirements.
&lt;/p&gt;
&lt;p&gt;
I think smaller memory footprint and faster speed are truly needed right now, though I think looking back to assembly is the wrong answer.  Temporarily, assembly will be very useful in the developing world until a better solution is found.  Speed and power consumption are critical concerns.  But we know so much more about computer science than we used to.  We should look for solutions that enable aggressive computational abstraction without the bloat.  And we might find (as some already have) that computers can write faster, smaller code than any person ever could.&lt;a href="http://www.lispcast.com/"&gt;&lt;img class="trailer" src="lil-lambda.png" /&gt;&lt;/a&gt;
&lt;/p&gt;&lt;hr /&gt;&lt;div&gt;&lt;h4&gt;Notes&lt;/h4&gt;&lt;div class="note" id="note29"&gt;&lt;p&gt;
&lt;span class="aster"&gt;*&lt;/span&gt;Remember the good-old-days when we had 6k of memory?  Yeah, that was great.
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;</description>
      <pubDate>Wed, 11 Mar 2009 05:00:00 GMT</pubDate>
      <guid>http://www.lispcast.com/small-sofware.html</guid>
      <dc:date>2009-03-11T05:00:00Z</dc:date>
    </item>
    <item>
      <title>A great story of lispy discovery</title>
      <link>http://www.lispcast.com/good-lisp-story.html</link>
      <description>&lt;p&gt;
&lt;a href="http://funcall.blogspot.com/2009/03/not-lisp-again.html" class="citation"&gt;Not Lisp again . . .&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
I'm always searching for a good way to explain what you can do
    with Lisp that you can't do with most other languages.  Joe
    Marshall has a compelling story, from a skeptic's point of view,
    for what makes functional programming different.  There are
    multiple parts that trace his way through a course at MIT and
    toward a love of lisp.
&lt;/p&gt;
&lt;p&gt;
From the post:
    &lt;blockquote id="p11"&gt;&lt;p&gt;
I was floored. Here we take the simple, straightforward definition of the derivative of a function. Type it in with essentially no modification (we're a little cavalier about dropping the limit and just defining dx to be a 'reasonably small number') and suddenly the computer knew how to do calculus! This was serious magic. I had never seen anything like it before.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;/p&gt;
&lt;p&gt;
Good stuff.  It made me
    revisit &lt;a href="http://mitpress.mit.edu/sicp/full-text/book/book.html"&gt;&lt;i&gt;Structure
    and Interpretation of Computer Programs&lt;/i&gt;&lt;/a&gt;, an
    all-time classic.&lt;a href="http://www.lispcast.com/"&gt;&lt;img class="trailer" src="lil-lambda.png" /&gt;&lt;/a&gt;
&lt;/p&gt;</description>
      <pubDate>Wed, 11 Mar 2009 05:00:00 GMT</pubDate>
      <guid>http://www.lispcast.com/good-lisp-story.html</guid>
      <dc:date>2009-03-11T05:00:00Z</dc:date>
    </item>
    <item>
      <title>C type system</title>
      <link>http://www.lispcast.com/C-types.html</link>
      <description>&lt;p&gt;
C's type system has been criticized for being flawed.  It
    certainly is not as logical as Haskell's.  I am not going to argue
    with that.  But C's type system has (at least) one redeeming
    quality: an escape hatch.
&lt;/p&gt;
&lt;p&gt;
When the Creators brought C into existence, they endowed it with a
    few datatypes and a way to make some new ones.  But by letting any
    pointer be cast to (void *), they blessed C with the unifying
    principle that makes it so useful&lt;span id="p1"&gt;*&lt;/span&gt;.  That principle is eloquently stated in three
    words:
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Bits is bits.&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
And its universality brings beauty to the language.&lt;a href="http://www.lispcast.com/"&gt;&lt;img class="trailer" src="lil-lambda.png" /&gt;&lt;/a&gt;
&lt;/p&gt;&lt;hr /&gt;&lt;div&gt;&lt;h4&gt;Notes&lt;/h4&gt;&lt;div class="note" id="note1"&gt;&lt;p&gt;
&lt;span class="aster"&gt;*&lt;/span&gt;And so annoyingly
    dangerous!
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;</description>
      <pubDate>Sat, 28 Feb 2009 06:00:00 GMT</pubDate>
      <guid>http://www.lispcast.com/C-types.html</guid>
      <dc:date>2009-02-28T06:00:00Z</dc:date>
    </item>
    <item>
      <title>Why type systems are right</title>
      <link>http://www.lispcast.com/types2.html</link>
      <description>&lt;p&gt;
Type systems are right because they impose a rigid view of a
    domain (otherwise known as a model) that can then be reasoned
    about in a structured and reliable way.  Well defined types define
    an ordered space in which the programmer can solve a problem.
    Outside of that space lies chaos.&lt;a href="http://www.lispcast.com/"&gt;&lt;img class="trailer" src="lil-lambda.png" /&gt;&lt;/a&gt;
&lt;/p&gt;</description>
      <pubDate>Sat, 28 Feb 2009 06:00:00 GMT</pubDate>
      <guid>http://www.lispcast.com/types2.html</guid>
      <dc:date>2009-02-28T06:00:00Z</dc:date>
    </item>
    <item>
      <title>Self and value slots</title>
      <link>http://www.lispcast.com/self-slots.html</link>
      <description>&lt;p&gt;
In &lt;a href="http://selflanguage.org/_static/published/programming-as-experience.pdf" class="citation"&gt;Programming as an Experience: The Inspiration
    for
    Self&lt;/a&gt;,
    the authors discuss successes and failures in bringing uniformity
    and minimalism to the language.  One such failure is that data
    slots and method slots have different semantics.
&lt;/p&gt;
&lt;p&gt;
They discuss different options for unifying method semantics.  All
    of the options they mentioned were disagreeable with the authors,
    since they require methods to be treated fundamentally differently
    from data.  Any attempt to make a method (that is, runnable code)
    act like data (that is, values) breaks the unity.
&lt;/p&gt;
&lt;p&gt;
What is weird to me is that they do not discuss making data act
    like code.  Why do they not make all slots act like method
    slots?&lt;span id="p27"&gt;*&lt;/span&gt; That is the idea of getter and setter methods.  It
    is so simple and uniform and solves the problem.  Why did they not
    try this?  Or did they?
&lt;/p&gt;
&lt;p&gt;
I wonder what a Self programmer thinks of this.&lt;a href="http://www.lispcast.com/"&gt;&lt;img class="trailer" src="lil-lambda.png" /&gt;&lt;/a&gt;
&lt;/p&gt;&lt;hr /&gt;&lt;div&gt;&lt;h4&gt;Notes&lt;/h4&gt;&lt;div class="note" id="note27"&gt;&lt;p&gt;
&lt;span class="aster"&gt;*&lt;/span&gt;See the &lt;a href="http://www.vpri.org/pdf/tr2006003a_objmod.pdf"&gt;id object system&lt;/a&gt; for an example of creating a
    prototype-based language with unified semantics for data and
    methods.
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;</description>
      <pubDate>Sat, 28 Feb 2009 06:00:00 GMT</pubDate>
      <guid>http://www.lispcast.com/self-slots.html</guid>
      <dc:date>2009-02-28T06:00:00Z</dc:date>
    </item>
    <item>
      <title>There is no behind your back on the Internet</title>
      <link>http://www.lispcast.com/flame-bait.html</link>
      <description>&lt;p&gt;
Why is it that people unfailingly want to put words in my mouth on
    the Internet?
&lt;/p&gt;
&lt;p&gt;
I suppose it happens all the time in everyday speech.  Or behind
    my back.  But on the Internet, everything you say is visible to
    all.  There is no behind your back.  And seeing it in writing,
    permanently attached to your site, that just sucks.  It is one of
    the main reasons I have disabled comments&lt;span id="p10"&gt;*&lt;/span&gt;.
&lt;/p&gt;
&lt;p&gt;
I (often) write what I believe.  I have written articles I am not
    proud of.  Either because I did not do enough research or I wrote
    what I thought others wanted to hear.  But you catch the same
    flack for regretable articles as you do for the really personal
    ones.  But the personal pieces--the ones that express my views,
    whether right or wrong--at least meant something to me when I
    wrote them.  They might actually lend themselves to communication
    on a deeper level.  But, invariably, those are the ones people
    call "flame bait".
&lt;/p&gt;
&lt;p&gt;
I guess that means I should just keep writing what I want.  It is
    more enjoyable, anyway.&lt;a href="http://www.lispcast.com/"&gt;&lt;img class="trailer" src="lil-lambda.png" /&gt;&lt;/a&gt;
&lt;/p&gt;&lt;hr /&gt;&lt;div&gt;&lt;h4&gt;Notes&lt;/h4&gt;&lt;div class="note" id="note10"&gt;&lt;p&gt;
&lt;span class="aster"&gt;*&lt;/span&gt;I have gotten many
    enlightening comments as well as intolerable idiocy.  It was not
    an easy decision.
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;</description>
      <pubDate>Sat, 28 Feb 2009 06:00:00 GMT</pubDate>
      <guid>http://www.lispcast.com/flame-bait.html</guid>
      <dc:date>2009-02-28T06:00:00Z</dc:date>
    </item>
    <item>
      <title>Haskell Types and Goedel's Incompleteness Theorem</title>
      <link>http://www.lispcast.com/haskell-types.html</link>
      <description>&lt;p&gt;
Haskell's type system disallows two broad classes of typing
    problems.  It does not allow what it can prove to be incorrect
    (for example assigning a &lt;em&gt;String&lt;/em&gt; value to
    a &lt;em&gt;Number&lt;/em&gt; variable).  That makes sense.  It also does not
    allow anything that it cannot prove correct.  That also makes
    sense, though it is somewhat annoying when you can see that it
    could be correct.  This problem comes down to the issue of
    provability.
&lt;/p&gt;
&lt;p&gt;
Haskell has a restricted inference engine to deduce the type of
    values.  It is restricted to reasoning somewhere below first order
    logic.  There are definitely things you cannot prove without at
    least first order logic&lt;span id="p13"&gt;*&lt;/span&gt;.  So Haskell's type engine cannot prove
    every type inference I can know is correct.  So it just blatantly
    limits what you can say.
&lt;/p&gt;
&lt;p&gt;
If it had a more powerful inference engine, one that was at least
    as powerful as first order logic, it would not even know what it
    could not prove.  Such is the problem with powerful
    logics&lt;span id="p14"&gt;*&lt;/span&gt;.  That
    means that there are typed expressions you could state that
    Haskell would not be able to prove correct (or incorrect).  And what is worse,
    Haskell would not even know that it could not prove them.  So
    Haskell must be restricted to a lower-order logic.
&lt;/p&gt;
&lt;p&gt;
At least, that's what the type theorists say.  Haskell will do
    lots of type inference work for you, as long as you restrict your
    type usage to a very limited range.  And I choose &lt;em&gt;not&lt;/em&gt; to
    live with that restriction.&lt;a href="http://www.lispcast.com/"&gt;&lt;img class="trailer" src="lil-lambda.png" /&gt;&lt;/a&gt;
&lt;/p&gt;&lt;div class="addendum"&gt;&lt;h1&gt;Addendum&lt;/h1&gt;&lt;div class="postdate"&gt;2009-02-28&lt;/div&gt;
&lt;p&gt;
Thanks goes to Don Stewart for correcting a blatant error of mine
    and revealing once again my near total ignorance.
&lt;/p&gt;
&lt;p&gt;
I said above that Haskell's type inference was hovering below
    first-order logic, when in fact, according to Don Stewart, it is
    equivalent to second order logic.  I stand corrected.
&lt;/p&gt;&lt;/div&gt;&lt;hr /&gt;&lt;div&gt;&lt;h4&gt;Notes&lt;/h4&gt;&lt;div class="note" id="note13"&gt;&lt;p&gt;
&lt;span class="aster"&gt;*&lt;/span&gt;For example, the famous example
    argument: Socrates is a man.  All men are mortal.  Therefore,
    Socrates is mortal
&lt;/p&gt;&lt;/div&gt;&lt;div class="note" id="note14"&gt;&lt;p&gt;
&lt;span class="aster"&gt;*&lt;/span&gt;Google Goedel's Incompleteness Theorem
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;</description>
      <pubDate>Fri, 27 Feb 2009 06:00:00 GMT</pubDate>
      <guid>http://www.lispcast.com/haskell-types.html</guid>
      <dc:date>2009-02-27T06:00:00Z</dc:date>
    </item>
  </channel>
</rss>
