<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress/2.2.3" -->
<rss version="2.0" 
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>
<channel>
	<title>Comments on: Logo</title>
	<link>http://blog.ianbicking.org/2007/10/19/logo/</link>
	<description></description>
	<pubDate>Wed, 09 Jul 2008 12:10:08 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.2.3</generator>

	<item>
		<title>By: Ian Bicking</title>
		<link>http://blog.ianbicking.org/2007/10/19/logo/#comment-1786</link>
		<dc:creator>Ian Bicking</dc:creator>
		<pubDate>Tue, 23 Oct 2007 21:49:43 +0000</pubDate>
		<guid>http://blog.ianbicking.org/2007/10/19/logo/#comment-1786</guid>
		<description>Ugh... the SVG thing is nice in concept, but a horrible implementation of the Logo language!  This is unfortunately very common.  Which is a shame, because it's really not much harder to implement the real Logo language than to implement these toy turtle graphics languages that people keep writing.</description>
		<content:encoded><![CDATA[<p>Ugh&#8230; the SVG thing is nice in concept, but a horrible implementation of the Logo language!  This is unfortunately very common.  Which is a shame, because it&#8217;s really not much harder to implement the real Logo language than to implement these toy turtle graphics languages that people keep writing.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: karl dubost, w3c</title>
		<link>http://blog.ianbicking.org/2007/10/19/logo/#comment-1785</link>
		<dc:creator>karl dubost, w3c</dc:creator>
		<pubDate>Tue, 23 Oct 2007 21:38:21 +0000</pubDate>
		<guid>http://blog.ianbicking.org/2007/10/19/logo/#comment-1785</guid>
		<description>And a [kind of version with SVG](http://www.fragmentarisch.net/svg/drawingboard.php)</description>
		<content:encoded><![CDATA[<p>And a <a href="http://www.fragmentarisch.net/svg/drawingboard.php">kind of version with SVG</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ian Bicking</title>
		<link>http://blog.ianbicking.org/2007/10/19/logo/#comment-1784</link>
		<dc:creator>Ian Bicking</dc:creator>
		<pubDate>Tue, 23 Oct 2007 21:37:13 +0000</pubDate>
		<guid>http://blog.ianbicking.org/2007/10/19/logo/#comment-1784</guid>
		<description>Seth: I had a Logo compiler myself that did full compilation ([Logo in Scheme](http://www.colorstudy.com/static/ianb/old/logo-scheme/)).  It didn't do it lazily, which caused some problems; as a result you couldn't use a function that had not been defined unless you used the explicit `(func arg1 arg2)` form, since it needed to look up the arity of the function.  I suppose if it looked for `TO` statements up-front (figuring out all the function signatures) this would also have fixed that problem.

For blocks there was a special form like `TO repeat :count [block :expr]`, and similar to to arity the function definition would effect the parsing; lists in the `:expr` position would actually be passed in as anonymous functions.  Again, if you look up all the function definitions up-front this would work much better.

In a [Tcl translator](http://www.colorstudy.com/static/ianb/old/tcl-scheme/) that I wrote it did the translation lazily (except in cases where it *knew* that a block was called for, like `proc`), and associated the translation with the string.  This seems like a reasonable strategy for Logo as well.  You could even compile *all* lists present in the source code, and simply ignore errors when they occur, and only actually signal the error at runtime if the person does use the list as a block.

Another strategy, if you don't mind diverging significantly from standard Logo (and NetLogo is already very divergent from the brief example you link to), is to do something more like Smalltalk, where code blocks have a convenient syntax.  I *believe* Smalltalk actually took inspiration from Logo in this regard, using `[]` as a kind of lambda.  You would need to get another syntax for literal lists then, but literal lists aren't that interesting, and most other uses of lists in Logo tend to be substitutes for strings, e.g., `print [hello world!]`, and you've already got syntax for full strings in NetLogo instead of only words.</description>
		<content:encoded><![CDATA[<p>Seth: I had a Logo compiler myself that did full compilation (<a href="http://www.colorstudy.com/static/ianb/old/logo-scheme/">Logo in Scheme</a>).  It didn&#8217;t do it lazily, which caused some problems; as a result you couldn&#8217;t use a function that had not been defined unless you used the explicit <code>(func arg1 arg2)</code> form, since it needed to look up the arity of the function.  I suppose if it looked for <code>TO</code> statements up-front (figuring out all the function signatures) this would also have fixed that problem.</p>

<p>For blocks there was a special form like <code>TO repeat :count [block :expr]</code>, and similar to to arity the function definition would effect the parsing; lists in the <code>:expr</code> position would actually be passed in as anonymous functions.  Again, if you look up all the function definitions up-front this would work much better.</p>

<p>In a <a href="http://www.colorstudy.com/static/ianb/old/tcl-scheme/">Tcl translator</a> that I wrote it did the translation lazily (except in cases where it <em>knew</em> that a block was called for, like <code>proc</code>), and associated the translation with the string.  This seems like a reasonable strategy for Logo as well.  You could even compile <em>all</em> lists present in the source code, and simply ignore errors when they occur, and only actually signal the error at runtime if the person does use the list as a block.</p>

<p>Another strategy, if you don&#8217;t mind diverging significantly from standard Logo (and NetLogo is already very divergent from the brief example you link to), is to do something more like Smalltalk, where code blocks have a convenient syntax.  I <em>believe</em> Smalltalk actually took inspiration from Logo in this regard, using <code>[]</code> as a kind of lambda.  You would need to get another syntax for literal lists then, but literal lists aren&#8217;t that interesting, and most other uses of lists in Logo tend to be substitutes for strings, e.g., <code>print [hello world!]</code>, and you&#8217;ve already got syntax for full strings in NetLogo instead of only words.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Seth Tisue</title>
		<link>http://blog.ianbicking.org/2007/10/19/logo/#comment-1783</link>
		<dc:creator>Seth Tisue</dc:creator>
		<pubDate>Tue, 23 Oct 2007 20:39:37 +0000</pubDate>
		<guid>http://blog.ianbicking.org/2007/10/19/logo/#comment-1783</guid>
		<description>Thanks for giving Logo some love, and mentioning NetLogo. (I am the lead developer of NetLogo.)

NetLogo is an unusual Logo; much of what you say about Logo in this post doesn't apply to NetLogo. The differences are summarized in our FAQ at http://ccl.northwestern.edu/netlogo/docs/faq.html#logodiffs . In particular, NetLogo is lexically scoped and control structures are special forms. This brings us closer to Scheme, though at present we don't have a macro facility or any other way for users to define their own special forms. These differences are there partly for design reasons and partly to facilitate efficient implementation.

NetLogo is partially compiled, partially interpreted. It's reasonably fast — much faster than a naive, totally-interpreted implementation would be. All parsing is done at compile time. Our compiler generates Java byte code from snippets of user code, but it doesn't handle the whole language yet, so we still have an interpreter to stitch those compiled snippets together. Over time, we plan to get closer and closer to full compilation.</description>
		<content:encoded><![CDATA[<p>Thanks for giving Logo some love, and mentioning NetLogo. (I am the lead developer of NetLogo.)</p>

<p>NetLogo is an unusual Logo; much of what you say about Logo in this post doesn&#8217;t apply to NetLogo. The differences are summarized in our FAQ at <a href="http://ccl.northwestern.edu/netlogo/docs/faq.html#logodiffs" rel="nofollow">http://ccl.northwestern.edu/netlogo/docs/faq.html#logodiffs</a> . In particular, NetLogo is lexically scoped and control structures are special forms. This brings us closer to Scheme, though at present we don&#8217;t have a macro facility or any other way for users to define their own special forms. These differences are there partly for design reasons and partly to facilitate efficient implementation.</p>

<p>NetLogo is partially compiled, partially interpreted. It&#8217;s reasonably fast — much faster than a naive, totally-interpreted implementation would be. All parsing is done at compile time. Our compiler generates Java byte code from snippets of user code, but it doesn&#8217;t handle the whole language yet, so we still have an interpreter to stitch those compiled snippets together. Over time, we plan to get closer and closer to full compilation.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Keith Gaughan</title>
		<link>http://blog.ianbicking.org/2007/10/19/logo/#comment-1767</link>
		<dc:creator>Keith Gaughan</dc:creator>
		<pubDate>Mon, 22 Oct 2007 15:46:48 +0000</pubDate>
		<guid>http://blog.ianbicking.org/2007/10/19/logo/#comment-1767</guid>
		<description>I'm paraphrasing, but I believe Philip Greenspun once described Tcl as essentially begin a brain-dead version of Lisp.</description>
		<content:encoded><![CDATA[<p>I&#8217;m paraphrasing, but I believe Philip Greenspun once described Tcl as essentially begin a brain-dead version of Lisp.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Clint Hill</title>
		<link>http://blog.ianbicking.org/2007/10/19/logo/#comment-1721</link>
		<dc:creator>Clint Hill</dc:creator>
		<pubDate>Sun, 21 Oct 2007 05:18:59 +0000</pubDate>
		<guid>http://blog.ianbicking.org/2007/10/19/logo/#comment-1721</guid>
		<description>Logo was my first introduction to computer programming. 

There is so much to say. I wish I had paid more attention. 

This is from a guy who saw his first computer in 83 and then bought an Apple IIgs because color monitors were cool in 86.

Now I am a damn .NET developer because that's where the jobs are in my area.</description>
		<content:encoded><![CDATA[<p>Logo was my first introduction to computer programming. </p>

<p>There is so much to say. I wish I had paid more attention. </p>

<p>This is from a guy who saw his first computer in 83 and then bought an Apple IIgs because color monitors were cool in 86.</p>

<p>Now I am a damn .NET developer because that&#8217;s where the jobs are in my area.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Noah Gift</title>
		<link>http://blog.ianbicking.org/2007/10/19/logo/#comment-1670</link>
		<dc:creator>Noah Gift</dc:creator>
		<pubDate>Sat, 20 Oct 2007 03:45:53 +0000</pubDate>
		<guid>http://blog.ianbicking.org/2007/10/19/logo/#comment-1670</guid>
		<description>Logo was the second language I used.  I remember taking a class in Logo in 8th grade, and my final project was a turtle riding a half-pipe doing tricks.  I was really into skateboarding at the time.  Logo rocks!  And I think I used an Apple IIe too.</description>
		<content:encoded><![CDATA[<p>Logo was the second language I used.  I remember taking a class in Logo in 8th grade, and my final project was a turtle riding a half-pipe doing tricks.  I was really into skateboarding at the time.  Logo rocks!  And I think I used an Apple IIe too.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
