title: How to return string containing evaluated arguments of procedure?
body: <p>Using Racket, I want to design a procedure that takes as its inputs a binary operation and two  arguments a &amp; b of any type, evaluates the binary operation on the arguments, and returns a string describing the result of the evaluation. For example, if my procedure were called foo, then</p>
  
  <pre><code>(foo + 1 2)
  (foo cons 'bar empty)
  </code></pre>
  
  <p>would return</p>
  
  <pre><code>The + of 1 and 2 is: 3
  The cons of 'bar and empty is: (bar)
  </code></pre>
  
  <p>My code would look something like</p>
  
  <pre><code>(define (foo op a b)
      (let ((result (op a b)))
        (display
         (string-append
          "The "
          (arg-&gt;string op)
          " of "
          (arg-&gt;string a)
          " and " 
          (arg-&gt;string b)
          " is: "
          (arg-&gt;string result)
          ))))
  </code></pre>
  
  <p><strong>Is it possible to construct some operation arg->string that would do what I want (namely, evaluate its argument before converting to a string?).</strong> Simply constructing a string or quoting the argument within the body of the procedure returns the literal result, i.e. "op" or 'op instead of "+" or '+.</p>
  
  <p>Any help is appreciated.</p>