title: Io language different behavior between interpreter and file execution
body: <p>I am trying to create a new operator in the Io language, but I've noticed different behavior when I check my work with an interpreter versus file execution:</p>
  
  <pre><code>## Executing nand.io
  ##########################
  OperatorTable addOperator("nand", 10)
  true nand := method(bool, if(bool, false, true))
  false nand := method(bool, true)
  
  true nand false println        # =&gt; false
  true nand true println         # =&gt; true
  false nand false println       # =&gt; false
  false nand true println        # =&gt; true
  
  # Why does this print 'true' (it should be 'false')?
  (true nand true) println      # =&gt; true
  
  # I noticed that the argument to nand is always printed
  true nand "not" println        # =&gt; not
  true nand "what" println       # =&gt; what
  false nand "I" println         # =&gt; I
  false nand "expected" println  # =&gt; expected
  
  # Another sanity check. I thought this might have to do with println behaving
  # oddly, but this conditional really does return true
  if(true nand true, "This should not print" println, "This should print" println)
  # =&gt; This should not print
  
  # More unexpected behavior
  false nand := method(arg, "foo")
  false nand "bar" println       # =&gt; "bar"
  
  true nand := method(arg, "foo")
  true nand "bar" println        # =&gt; "bar"
  
  false nand := "Why is this not returned?"
  false nand "aaaaahhhh" println # =&gt; "aaaaahhhh"
  
  
  
  ## Ran in the io interpreter
  ###############################
  OperatorTable addOperator("nand", 10)
  true nand := method(bool, if(bool, false, true))
  false nand := method(bool, true)
  
  # Same as file execution when sent to println
  true nand false println   # =&gt; false
  true nand true println    # =&gt; true
  false nand false println  # =&gt; false
  false nand true println   # =&gt; true
  
  # It acually does what's expected here
  true nand false           # =&gt; true
  true nand true            # =&gt; false    -- It works here!!!
  false nand false          # =&gt; true
  false nand true           # =&gt; true
  
  if(true nand true, "This should not print" println, "This should print" println)
  # =&gt; This should print
  </code></pre>
  
  <p>Maybe this has to do compilation vs interpretation? Is this actually expected behavior and maybe I'm missing something fundamental about the language (I only started learning Io today)?</p>