<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Thu, Feb 19, 2015 at 1:11 AM, Roelof Wobben <span dir="ltr"><<a href="mailto:r.wobben@home.nl" target="_blank">r.wobben@home.nl</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
  
    
  
  <div bgcolor="#FFFFFF" text="#000000">
    <div>I think I found the answer by some
      trail and error,<br>
      <br>
      hanoi 1 start _ end = [ (start, end)]<br>
      hanoi n start temp end = hanoi (n-1) start end temp ++ [(start,
      end)] ++ hanoi (n-1) temp start end<br>
      <br>
      main = print $ hanoi 3 'a' 'b' 'c'<br></div></div></blockquote><div><br></div><div>I mentioned earlier that using "hanoi 1 start temp end" instead of "[(start, end)]" made things read a bit better to me. I figured out why. It isolates the final representation of a "move" to the base case only. So if you make that change, you could then write your base case as:</div><div><br></div>







<div>hanoi 1 start _ end = "move 1 disk from " ++ start ++ " to " ++ end ++ ".\n"  </div><div><br></div><div>and the other case still works correctly if you used the "hanoi 1" version. You'll want to change "print" to "putStr" in main, but it will now print the list of moves in English instead of Haskell.</div></div></div></div>