title: Is this zip function tail recursive?
body: <p>I implemented it using continuation. I think this is tail recursive but I'm told it's not. Why isn't it tail recursive?</p>
  
  <pre><code>let rec zip_tr fc sc l1 l2 = match l1, l2 with
    | [], [] -&gt; sc []
    | [], _ -&gt; fc (List.length l2)
    | _, [] -&gt; fc (List.length l1)
    | h1::t1, h2::t2 -&gt; 
      zip_tr fc (fun l -&gt; sc ((h1, h2) :: l)) t1 t2
  </code></pre>
  
  <p>Isn't this tail recursive? Do the failure/success continuations have an effect effect on tail recursiveness? </p>