<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Deviations : F#</title><link>http://blogs.msdn.com/deviations/archive/tags/F_2300_/default.aspx</link><description>Tags: F#</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Solving the Morris Puzzle with F#</title><link>http://blogs.msdn.com/deviations/archive/2008/11/24/solving-the-morris-puzzle-with-fsharp.aspx</link><pubDate>Tue, 25 Nov 2008 00:04:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9138384</guid><dc:creator>ptadcs</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/deviations/comments/9138384.aspx</comments><wfw:commentRss>http://blogs.msdn.com/deviations/commentrss.aspx?PostID=9138384</wfw:commentRss><description>&lt;SPAN lang=EN-US&gt;&lt;FONT size=2&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT face=Tahoma size=2&gt;It’s been 11 years since I attended a class which presented both the &lt;/FONT&gt;&lt;A href="https://emea.mail.microsoft.com/OWA/redir.aspx?C=2aa8b5f1a1b646dcb728c5f372d7b566&amp;amp;URL=http%3a%2f%2fen.wikipedia.org%2fwiki%2fFunctional_programming" target=_blank&gt;&lt;FONT face=Tahoma size=2&gt;functional&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Tahoma size=2&gt; and &lt;/FONT&gt;&lt;A href="https://emea.mail.microsoft.com/OWA/redir.aspx?C=2aa8b5f1a1b646dcb728c5f372d7b566&amp;amp;URL=http%3a%2f%2fen.wikipedia.org%2fwiki%2fLogic_programming" target=_blank&gt;&lt;FONT face=Tahoma size=2&gt;logic programming&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Tahoma size=2&gt; paradigms in a single semester, materializing in a &lt;/FONT&gt;&lt;A href="https://emea.mail.microsoft.com/OWA/redir.aspx?C=2aa8b5f1a1b646dcb728c5f372d7b566&amp;amp;URL=http%3a%2f%2falain.colmerauer.free.fr%2fArchivesPublications%2fHistoireProlog%2f19november92.pdf" target=_blank&gt;&lt;FONT face=Tahoma size=2&gt;Prolog&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Tahoma size=2&gt; and a &lt;/FONT&gt;&lt;A href="https://emea.mail.microsoft.com/OWA/redir.aspx?C=2aa8b5f1a1b646dcb728c5f372d7b566&amp;amp;URL=http%3a%2f%2fcaml.inria.fr%2fcaml-light%2findex.en.html" target=_blank&gt;&lt;FONT face=Tahoma size=2&gt;Caml Light&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Tahoma size=2&gt; projects. That class shook the grounds on top of which I had been building my plain old common imperative programming skills and so it made me think outside the box. One can say it changed my life, as I spent 2 and a half years &lt;I&gt;&lt;A href="https://emea.mail.microsoft.com/OWA/redir.aspx?C=2aa8b5f1a1b646dcb728c5f372d7b566&amp;amp;URL=http%3a%2f%2fen.wikipedia.org%2fwiki%2fLisp_(programming_language)" target=_blank&gt;LISPing&lt;/A&gt;&lt;/I&gt; around lists, lambdas and an incredible number of parentheses. I’m still not sure if that change was for better or for worse, but that is a question beyond the scope of this blog.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT face=Tahoma size=2&gt;One thing is sure, though: I learned there are different paradigms and instances of those paradigms (programming languages) which are better suited for different problems and scenarios. This brings me to the puzzle I’m bringing to this post. My wife showed me the sequence that follows:&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;&lt;/SPAN&gt;&lt;FONT face=Tahoma&gt;&lt;FONT size=2&gt;&lt;SPAN lang=EN-US&gt;1&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal&gt;&lt;FONT face=Tahoma&gt;&lt;FONT size=2&gt;&lt;SPAN lang=EN-US&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face=Tahoma&gt;&lt;FONT size=2&gt;&lt;SPAN lang=EN-US&gt;11&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal&gt;&lt;FONT face=Tahoma&gt;&lt;FONT size=2&gt;&lt;SPAN lang=EN-US&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face=Tahoma&gt;&lt;FONT size=2&gt;&lt;SPAN lang=EN-US&gt;21&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal&gt;&lt;FONT face=Tahoma&gt;&lt;FONT size=2&gt;&lt;SPAN lang=EN-US&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face=Tahoma&gt;&lt;FONT size=2&gt;&lt;SPAN lang=EN-US&gt;1211&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal&gt;&lt;FONT face=Tahoma&gt;&lt;FONT size=2&gt;&lt;SPAN lang=EN-US&gt;111221&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT face=Tahoma size=2&gt;She then asked me to continue the sequence and I confess it took me quite a while to figure out the pattern. If you’re in trouble, just search the web for the Morris Puzzle or keep up reading and reverse-engineer the code below. The point is this problem is what the functional programming paradigm was created for and I’d like to share my F# solution with you.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT face=Tahoma size=2&gt;
&lt;P class=MsoNormal style="MARGIN-LEFT: 35.4pt"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;#light&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;open&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt; System&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; COLOR: green; FONT-FAMILY: 'Lucida Console'"&gt;// obtains a digit list from a string supposedly containing an integer&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;let&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt; &lt;SPAN style="COLOR: blue"&gt;rec&lt;/SPAN&gt; IntListFromString (s : string) =&amp;nbsp;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;match&lt;/SPAN&gt; s.Length &lt;SPAN style="COLOR: blue"&gt;with&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 0 &lt;SPAN style="COLOR: blue"&gt;-&amp;gt;&lt;/SPAN&gt; []&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; | _ &lt;SPAN style="COLOR: blue"&gt;-&amp;gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;let&lt;/SPAN&gt; char = s.Substring (0, 1) &lt;SPAN style="COLOR: blue"&gt;in&lt;/SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;let&lt;/SPAN&gt; parsed = 0 &lt;SPAN style="COLOR: blue"&gt;in&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Int32.Parse(char) :: IntListFromString (s.Substring 1)&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; COLOR: green; FONT-FAMILY: 'Lucida Console'"&gt;// prints a list by printing each of its elements consecutively&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;let&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt; PrintList l =&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; List.iter print_any l;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Console.WriteLine()&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; COLOR: green; FONT-FAMILY: 'Lucida Console'"&gt;// this recursive function implements the core Morris puzzle algorithm&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;let&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt; &lt;SPAN style="COLOR: blue"&gt;rec&lt;/SPAN&gt; MorrisHelper x l =&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;match&lt;/SPAN&gt; l &lt;SPAN style="COLOR: blue"&gt;with&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;// an empty list will result in an empty list&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | [] &lt;SPAN style="COLOR: blue"&gt;-&amp;gt;&lt;/SPAN&gt; []&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;// a list with a single element will typically result in a list&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;// with 2 elements&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | [y] &lt;SPAN style="COLOR: blue"&gt;-&amp;gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;// account for sequences of 10 or more elements&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt; x &amp;gt;= 10 &lt;SPAN style="COLOR: blue"&gt;then&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;let&lt;/SPAN&gt; left = x/10 &lt;SPAN style="COLOR: blue"&gt;in&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;let&lt;/SPAN&gt; right = x%10 &lt;SPAN style="COLOR: blue"&gt;in&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [left;right;y]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;else&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [x;y]&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;// if the head of the list equals the next element, increment the&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;// count and recursively call the function. Otherwise, prefix the&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;// resulting list with a count and the counted element and call&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;// the helper function again in a recursively manner&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | y::z &lt;SPAN style="COLOR: blue"&gt;-&amp;gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt; y = List.hd z &lt;SPAN style="COLOR: blue"&gt;then&lt;/SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MorrisHelper (x+1) z&amp;nbsp;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;else&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt; x &amp;gt;= 10 &lt;SPAN style="COLOR: blue"&gt;then&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;let&lt;/SPAN&gt; left = x/10 &lt;SPAN style="COLOR: blue"&gt;in&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;let&lt;/SPAN&gt; right = x%10 &lt;SPAN style="COLOR: blue"&gt;in&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [left;right;y] @ (MorrisHelper 1 z)&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;else&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [x;y] @ (MorrisHelper 1 z)&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; COLOR: green; FONT-FAMILY: 'Lucida Console'"&gt;// this recursive function allows the execution of several &lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; COLOR: green; FONT-FAMILY: 'Lucida Console'"&gt;// iterations of the Morris Puzzle for a starting list&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;let&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt; &lt;SPAN style="COLOR: blue"&gt;rec&lt;/SPAN&gt; MorrisPuzzle l iterations =&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;match&lt;/SPAN&gt; iterations &lt;SPAN style="COLOR: blue"&gt;with&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;// if the number of iterations is zero, then the output&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;// is the list itself (recursion base)&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 0 &lt;SPAN style="COLOR: blue"&gt;-&amp;gt;&lt;/SPAN&gt; l&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;// otherwise, call the helper function and print the results,&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;// decrementing the iteration count and recursively calling this&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;// function&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; | _ &lt;SPAN style="COLOR: blue"&gt;-&amp;gt;&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;let&lt;/SPAN&gt; res = MorrisHelper 1 l &lt;SPAN style="COLOR: blue"&gt;in&lt;/SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PrintList res;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MorrisPuzzle res (iterations-1)&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; COLOR: green; FONT-FAMILY: 'Lucida Console'"&gt;/// The main entry point for the application.&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;[&amp;lt;STAThread&amp;gt;]&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;[&amp;lt;EntryPoint&amp;gt;]&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;let&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt; main(args) =&amp;nbsp;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;let&lt;/SPAN&gt; startingList = IntListFromString args.[0]&amp;nbsp;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PrintList startingList&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;let&lt;/SPAN&gt; listaRes = MorrisPuzzle startingList (System.Int32.Parse args.[1])&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 8pt; FONT-FAMILY: 'Lucida Console'"&gt;&lt;/P&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT face=Tahoma size=2&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;As the code is thoroughly decorated with comments, please allow me not to dive any deeper into it, what do you say?&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;Let me just provide some pointers if you’re into trying out F# yourself:&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Lucida Console'"&gt;match&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt; &lt;/SPAN&gt;&lt;B&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Lucida Console'"&gt;F# knowledge&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN lang=EN-US&gt; &lt;/SPAN&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Lucida Console'"&gt;with&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Lucida Console'"&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Lucida Console'"&gt;None&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt; -&amp;gt; &lt;/SPAN&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;&lt;A href="http://research.microsoft.com/fsharp/fsharp.aspx" target=_blank&gt;http://research.microsoft.com/fsharp/fsharp.aspx&lt;/A&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;&lt;A href="https://emea.mail.microsoft.com/OWA/redir.aspx?C=2aa8b5f1a1b646dcb728c5f372d7b566&amp;amp;URL=http%3a%2f%2fwww.microsoft.com%2fdownloads%2fdetails.aspx%3fFamilyID%3d61ad6924-93ad-48dc-8c67-60f7e7803d3c%26displaylang%3den" target=_blank&gt;Download the latest CTP&lt;/A&gt; and start off with the tutorial template for the basic constructs&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Lucida Console'"&gt;_&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt; -&amp;gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;&lt;A href="http://msdn.microsoft.com/en-us/fsharp/default.aspx" target=_blank&gt;http://msdn.microsoft.com/en-us/fsharp/default.aspx&lt;/A&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;&lt;A href="http://blogs.msdn.com/chrsmith/" target=_blank&gt;http://blogs.msdn.com/chrsmith/&lt;/A&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;/UL&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;&amp;nbsp;This is just great, don't you think? The question now is: for when a &lt;STRONG&gt;CLR-based logic programming language&lt;/STRONG&gt;? I've seen a very&amp;nbsp;clever move around a &lt;A class="" href="http://homepages.inf.ed.ac.uk/jcook/papers/SPE.pdf" mce_href="http://homepages.inf.ed.ac.uk/jcook/papers/SPE.pdf"&gt;P# language which compiles to C#&lt;/A&gt;, it can't be that difficult bringing that to MSIL directly, right? Microsoft Research, what says you? &lt;SPAN lang=EN-US&gt;&lt;FONT face=Wingdings&gt;J&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;&amp;nbsp; Till next time,&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;STRONG&gt;&lt;A class="" href="http://blogs.msdn.com/deviations/pages/resume-manuel-oliveira.aspx" mce_href="http://blogs.msdn.com/deviations/pages/resume-manuel-oliveira.aspx"&gt;Manuel Oliveira&lt;/A&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9138384" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/deviations/archive/tags/F_2300_/default.aspx">F#</category></item></channel></rss>