<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: MIT replaces Scheme with Python</title>
	<atom:link href="http://www.johndcook.com/blog/2009/03/26/mit-replaces-scheme-with-python/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.johndcook.com/blog/2009/03/26/mit-replaces-scheme-with-python/</link>
	<description>The blog of John D. Cook</description>
	<lastBuildDate>Sat, 11 Feb 2012 01:10:06 -0500</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: &#187; links for 2011-09-07 (Dhananjay Nene)</title>
		<link>http://www.johndcook.com/blog/2009/03/26/mit-replaces-scheme-with-python/comment-page-1/#comment-102366</link>
		<dc:creator>&#187; links for 2011-09-07 (Dhananjay Nene)</dc:creator>
		<pubDate>Wed, 07 Sep 2011 20:01:32 +0000</pubDate>
		<guid isPermaLink="false">http://www.johndcook.com/blog/?p=1866#comment-102366</guid>
		<description>[...] MIT replaces Scheme with Python — The Endeavour I found this comment on contrasting functional programming between python and scheme quite interesting http://t.co/4nL4oag #old circa 2009 (tags: via:packrati.us old)     This entry was posted on Thursday, September 8th, 2011 at 1:30 am and is filed under Bookmarks. You can follow any responses to this entry through the RSS 2.0 feed. Responses are currently closed, but you can trackback from your own site. [...]</description>
		<content:encoded><![CDATA[<p>[...] MIT replaces Scheme with Python — The Endeavour I found this comment on contrasting functional programming between python and scheme quite interesting <a href="http://t.co/4nL4oag" rel="nofollow">http://t.co/4nL4oag</a> #old circa 2009 (tags: via:packrati.us old)     This entry was posted on Thursday, September 8th, 2011 at 1:30 am and is filed under Bookmarks. You can follow any responses to this entry through the RSS 2.0 feed. Responses are currently closed, but you can trackback from your own site. [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Egg Syntax</title>
		<link>http://www.johndcook.com/blog/2009/03/26/mit-replaces-scheme-with-python/comment-page-1/#comment-102321</link>
		<dc:creator>Egg Syntax</dc:creator>
		<pubDate>Wed, 07 Sep 2011 15:53:15 +0000</pubDate>
		<guid isPermaLink="false">http://www.johndcook.com/blog/?p=1866#comment-102321</guid>
		<description>It&#039;s worth taking a look at Peter Norvig&#039;s article &quot;&lt;a href=&quot;http://norvig.com/python-lisp.html&quot; rel=&quot;nofollow&quot;&gt;Python For Lisp Programmers&lt;/a&gt;&quot;.</description>
		<content:encoded><![CDATA[<p>It&#8217;s worth taking a look at Peter Norvig&#8217;s article &#8220;<a href="http://norvig.com/python-lisp.html" rel="nofollow">Python For Lisp Programmers</a>&#8220;.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: John Conti</title>
		<link>http://www.johndcook.com/blog/2009/03/26/mit-replaces-scheme-with-python/comment-page-1/#comment-21791</link>
		<dc:creator>John Conti</dc:creator>
		<pubDate>Wed, 29 Jul 2009 20:38:55 +0000</pubDate>
		<guid isPermaLink="false">http://www.johndcook.com/blog/?p=1866#comment-21791</guid>
		<description>In my opinion, writing flexible functional code in Python is not like writing in Scheme.  I would say Python has functional features, whereas Scheme encourages functional use by clearly and easily allowing scope control.  When actually metaprogramming and functionally programming in Python, Perl and Ruby, there are gotchas in the nooks and crannies of those languages that Scheme&#039;s clean design avoids.

For example I recently wrote a routine that did a hex dump on my system and was happy to have Python&#039;s functional features:

def debug_dump_mem(adr,  len):
    if not debug_test: return
    f = lambda a: ((a = adr+len) and &quot;xx&quot;) or (&quot;%02x&quot; % dut.ReadRegister(a))
    line_adrs = range(adr &amp; ~0xf,  adr + len,  0x10)
    for line_adr in line_adrs:
        byte_adrs = range(line_adr,  line_adr + 0x10)
        print &quot;%04x: &quot; % line_adr,  &#039; &#039;.join(map(f,  byte_adrs))

That doesn&#039;t hold a candle to this snippet from Essentials of Programming Languages IMHO:

(define expand-type-expression
  (lambda (texp tenv)
    (letrec 
      ((loop (lambda (texp)
               (cases type-exp texp
                 (tid-type-exp (id) (apply-tenv-typedef tenv id))
                 (int-type-exp () (atomic-type &#039;int))
                 (bool-type-exp () (atomic-type &#039;bool))
                 (proc-type-exp (arg-texps result-texp)
                   (proc-type
                     (map loop arg-texps)
                     (loop result-texp)))))))
      (loop texp))))

My two cents really...

However it is quite cool that Structure and Interpretation of Computer Programs lives on for free as download!

Thanks for the post.

Cheers,
John</description>
		<content:encoded><![CDATA[<p>In my opinion, writing flexible functional code in Python is not like writing in Scheme.  I would say Python has functional features, whereas Scheme encourages functional use by clearly and easily allowing scope control.  When actually metaprogramming and functionally programming in Python, Perl and Ruby, there are gotchas in the nooks and crannies of those languages that Scheme&#8217;s clean design avoids.</p>
<p>For example I recently wrote a routine that did a hex dump on my system and was happy to have Python&#8217;s functional features:</p>
<p>def debug_dump_mem(adr,  len):<br />
    if not debug_test: return<br />
    f = lambda a: ((a = adr+len) and &#8220;xx&#8221;) or (&#8221;%02x&#8221; % dut.ReadRegister(a))<br />
    line_adrs = range(adr &amp; ~0xf,  adr + len,  0&#215;10)<br />
    for line_adr in line_adrs:<br />
        byte_adrs = range(line_adr,  line_adr + 0&#215;10)<br />
        print &#8220;%04x: &#8221; % line_adr,  &#8216; &#8216;.join(map(f,  byte_adrs))</p>
<p>That doesn&#8217;t hold a candle to this snippet from Essentials of Programming Languages IMHO:</p>
<p>(define expand-type-expression<br />
  (lambda (texp tenv)<br />
    (letrec<br />
      ((loop (lambda (texp)<br />
               (cases type-exp texp<br />
                 (tid-type-exp (id) (apply-tenv-typedef tenv id))<br />
                 (int-type-exp () (atomic-type &#8216;int))<br />
                 (bool-type-exp () (atomic-type &#8216;bool))<br />
                 (proc-type-exp (arg-texps result-texp)<br />
                   (proc-type<br />
                     (map loop arg-texps)<br />
                     (loop result-texp)))))))<br />
      (loop texp))))</p>
<p>My two cents really&#8230;</p>
<p>However it is quite cool that Structure and Interpretation of Computer Programs lives on for free as download!</p>
<p>Thanks for the post.</p>
<p>Cheers,<br />
John</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Wesley Chun</title>
		<link>http://www.johndcook.com/blog/2009/03/26/mit-replaces-scheme-with-python/comment-page-1/#comment-19007</link>
		<dc:creator>Wesley Chun</dc:creator>
		<pubDate>Tue, 09 Jun 2009 21:15:46 +0000</pubDate>
		<guid isPermaLink="false">http://www.johndcook.com/blog/?p=1866#comment-19007</guid>
		<description>@carsten: functions are 1st-class objects in Python, and what you ask for is available, i.e., creating, passing,returning of function objects (both named and anonymous, i.e., lambda, but for the latter, there are no blocks, just a single expression), statically-nested functions, inner functions, closures, currying/partial function application, as well as ways to map and filter arrays (Python lists) using map()/filter() or list comprehensions or generator expressions. Python functions can also be coroutines and generators where functions can be &quot;paused,&quot; yield some intemediate result, then resumed with an iterative next() call to retrieve the next result. Similarly, you can also pass in values to the generator as well as exceptions. Of course, Python functions also support general features such as default arguments and variable arguments.</description>
		<content:encoded><![CDATA[<p>@carsten: functions are 1st-class objects in Python, and what you ask for is available, i.e., creating, passing,returning of function objects (both named and anonymous, i.e., lambda, but for the latter, there are no blocks, just a single expression), statically-nested functions, inner functions, closures, currying/partial function application, as well as ways to map and filter arrays (Python lists) using map()/filter() or list comprehensions or generator expressions. Python functions can also be coroutines and generators where functions can be &#8220;paused,&#8221; yield some intemediate result, then resumed with an iterative next() call to retrieve the next result. Similarly, you can also pass in values to the generator as well as exceptions. Of course, Python functions also support general features such as default arguments and variable arguments.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: %w{Scheme Python Rage Love Apathy} &#171; The Mendicant Bug</title>
		<link>http://www.johndcook.com/blog/2009/03/26/mit-replaces-scheme-with-python/comment-page-1/#comment-15046</link>
		<dc:creator>%w{Scheme Python Rage Love Apathy} &#171; The Mendicant Bug</dc:creator>
		<pubDate>Sat, 28 Mar 2009 03:30:20 +0000</pubDate>
		<guid isPermaLink="false">http://www.johndcook.com/blog/?p=1866#comment-15046</guid>
		<description>[...] Python Rage Love&#160;Apathy} 2009 March 27    by Jason Adams   John Cook just brought up the changeover from Scheme to Python in MIT&#8217;s beginning CS classes. I was exposed to Scheme [...]</description>
		<content:encoded><![CDATA[<p>[...] Python Rage Love&nbsp;Apathy} 2009 March 27    by Jason Adams   John Cook just brought up the changeover from Scheme to Python in MIT&#8217;s beginning CS classes. I was exposed to Scheme [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: arthegall</title>
		<link>http://www.johndcook.com/blog/2009/03/26/mit-replaces-scheme-with-python/comment-page-1/#comment-14992</link>
		<dc:creator>arthegall</dc:creator>
		<pubDate>Thu, 26 Mar 2009 16:37:52 +0000</pubDate>
		<guid isPermaLink="false">http://www.johndcook.com/blog/?p=1866#comment-14992</guid>
		<description>They phased &lt;i&gt;in&lt;/i&gt; the Python class before they phased &lt;i&gt;out&lt;/i&gt; the old Scheme-bearing 6.001 (whose last class was, I believe, last Spring).  

My impression is that, in person, Sussman is very open to Python-as-a-language, and encourages people to use it in a kind of Scheme-lite sort of way (although, without tail-call optimization and continuations, there&#039;s a lot you can&#039;t do in Python as easily as in Scheme).  Sussman&#039;s more advanced symbolic programming course is still taught in Scheme, although some of the class projects last year were done in Python.</description>
		<content:encoded><![CDATA[<p>They phased <i>in</i> the Python class before they phased <i>out</i> the old Scheme-bearing 6.001 (whose last class was, I believe, last Spring).  </p>
<p>My impression is that, in person, Sussman is very open to Python-as-a-language, and encourages people to use it in a kind of Scheme-lite sort of way (although, without tail-call optimization and continuations, there&#8217;s a lot you can&#8217;t do in Python as easily as in Scheme).  Sussman&#8217;s more advanced symbolic programming course is still taught in Scheme, although some of the class projects last year were done in Python.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Beetle B.</title>
		<link>http://www.johndcook.com/blog/2009/03/26/mit-replaces-scheme-with-python/comment-page-1/#comment-14989</link>
		<dc:creator>Beetle B.</dc:creator>
		<pubDate>Thu, 26 Mar 2009 14:53:06 +0000</pubDate>
		<guid isPermaLink="false">http://www.johndcook.com/blog/?p=1866#comment-14989</guid>
		<description>I believe they changed to Python some years ago. The article merely states the reason and is not an indicator of when it happened.</description>
		<content:encoded><![CDATA[<p>I believe they changed to Python some years ago. The article merely states the reason and is not an indicator of when it happened.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Bill the Lizard</title>
		<link>http://www.johndcook.com/blog/2009/03/26/mit-replaces-scheme-with-python/comment-page-1/#comment-14987</link>
		<dc:creator>Bill the Lizard</dc:creator>
		<pubDate>Thu, 26 Mar 2009 14:39:37 +0000</pubDate>
		<guid isPermaLink="false">http://www.johndcook.com/blog/?p=1866#comment-14987</guid>
		<description>A good point that seems to have gotten lost in all of the uproar, until now.  I&#039;ve been thinking of reading SICP and presenting selected exercises in a series on my blog, and Python is on my short list of candidate languages.  The other candidates are JavaScript and, of course, Scheme (but &lt;i&gt;everyone&lt;/i&gt; does it in Scheme).</description>
		<content:encoded><![CDATA[<p>A good point that seems to have gotten lost in all of the uproar, until now.  I&#8217;ve been thinking of reading SICP and presenting selected exercises in a series on my blog, and Python is on my short list of candidate languages.  The other candidates are JavaScript and, of course, Scheme (but <i>everyone</i> does it in Scheme).</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Carsten</title>
		<link>http://www.johndcook.com/blog/2009/03/26/mit-replaces-scheme-with-python/comment-page-1/#comment-14986</link>
		<dc:creator>Carsten</dc:creator>
		<pubDate>Thu, 26 Mar 2009 14:26:17 +0000</pubDate>
		<guid isPermaLink="false">http://www.johndcook.com/blog/?p=1866#comment-14986</guid>
		<description>well I can understand the motivation but nevertheless it&#039;s somewhat sad.

BTW: I don&#039;t know python but you only mentioned creating and passing functions as an argument but to do serious FP you need functions as a result, closures, etc.</description>
		<content:encoded><![CDATA[<p>well I can understand the motivation but nevertheless it&#8217;s somewhat sad.</p>
<p>BTW: I don&#8217;t know python but you only mentioned creating and passing functions as an argument but to do serious FP you need functions as a result, closures, etc.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.628 seconds -->

