title: Currying with Mathematica
body: <p>One may implement a limited form of <a href="http://en.wikipedia.org/wiki/Currying" rel="noreferrer"><strong>Currying</strong></a> in Mathematica, using this construct:</p>
  
  <pre><code>f[a_][b_][c_] := (a^2 + b^2)/c^2
  </code></pre>
  
  <p>Allowing one to do, for example:</p>
  
  <pre><code>f[4][3] /@ Range@5
  </code></pre>
  
  <pre>  <b>{25, 25/4, 25/9, 25/16, 1}</b></pre>
  
  <hr>
  
  <p>There is a problem: <code>Attributes</code> only apply to the first (set of) argument(s).  Consider:</p>
  
  <pre><code>ClearAll[f]
  SetAttributes[f, HoldAllComplete]
  
  f[a_][b_][c_] :=
    {ToString@Unevaluated@a,
     ToString@Unevaluated@b,
     ToString@Unevaluated@c}
  
  f[2 + 2][ 8/4 ][3 + 5]
  </code></pre>
  
  <pre> <b>  {"2 + 2", "2", "8"} </b> </pre>
  
  <p>My intent was to return <code>"8 / 4"</code> and <code>"3 + 5"</code> in the list.</p>
  
  <hr>
  
  <p>Consequently:</p>
  
  <ul>
  <li><p>Is there a way to extend attributes to this construct?</p></li>
  <li><p>Is there another convenient construct to achieve this?</p></li>
  <li><p>Are there other ways, besides attributes, to extend Currying within Mathematica?</p></li>
  </ul>