title: Why I can use the name of the a lambda expression, but not the name of the function?
body: <p>I can define a "big" function using a "small" function:</p>
  
  <pre><code>fun apply3(a:Int, b:Int, c:Int, func: (Int,Int,Int)-&gt;Int ): Int{
      return func(a,b,c)
  }
  </code></pre>
  
  <p>I can call it so:</p>
  
  <pre><code>println(apply3(1,2,3,{a,b,c-&gt;a+b+c}))
  </code></pre>
  
  <p>On the other hand, if I want to use the same function several times and use a name for it, I have problems:</p>
  
  <pre><code>val plus1: (Int,Int,Int)-&gt;Int = {a,b,c-&gt;a+b+c}  //this is OK
  ...
  fun plus2(a:Int, b:Int, c:Int)=a+b+c    // this too
  ...
  println(apply3(1,2,3,plus1))    // this is allowed
  ...
  println(apply3(1,2,3,plus2))    // this is NOT allowed
  </code></pre>
  
  <p>The last line is forbidden. With message:</p>
  
  <pre><code>Type mismatch
  Required: (Int,Int,Int)-&gt;Int
  Found: Int
  </code></pre>
  
  <p>Why? For me, plus2 and plus2 are the same things?</p>
  
  <p><a href="https://stackoverflow.com/questions/16120697/kotlin-how-to-pass-a-function-as-parameter-to-another">This post</a> has an answer that advises to use ::plus2 in my case. This helps technically but does not explain the difference between these two functions.</p>