title: Redefine a scheme built-in, but only when used as an argument to a specific procedure?
body: <p>How can I redefine the procedure <code>and</code> only when it is called as an argument to the procedure <code>fetch</code>?</p>
  
  <p>For example:</p>
  
  <pre><code>; this `and` returns #f
  (and #t #f)
  
  ; this `and` returns "and a b" 
  (fetch (foo (bar (and "a" "b"))))
  </code></pre>
  
  <p>I would like to write a macro to do this, but I can't work out how to write a pattern that matches <code>and</code> anywhere in an arbitrary tree of arguments passed to <code>fetch</code>.</p>
  
  <p>I am using Chicken and am happy to use as much of R7RS as Chicken supports. </p>